yaparc 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,25 @@ require 'pp'
5
5
  class YaparcTest < Test::Unit::TestCase
6
6
  include ::Yaparc
7
7
 
8
+ def test_directory_structure
9
+ parser = Yaparc::Seq.new(Yaparc::Many.new(Yaparc::Regex.new(/\A[a-z]/),''),
10
+ Yaparc::Many.new(Yaparc::Seq.new(Yaparc::Symbol.new('/'),
11
+ Yaparc::Regex.new(/\A[a-z]*/)) do |_,path|
12
+ path
13
+ end,'')
14
+ ) do |head, rest|
15
+ {:head => head,:rest => rest }
16
+ end
17
+ result = parser.parse("root/user")
18
+ assert_instance_of Result::OK, result
19
+ assert_equal Hash[:head=>"root", :rest=>"user"], result.value
20
+ end
21
+
8
22
  def test_seq_alt_parse
9
- parser = Yaparc::SeqParser.new(Yaparc::Symbol.new('scheme'),
10
- Yaparc::Symbol.new(':'),
11
- Yaparc::AltParser.new(Natural.new,
12
- Identifier.new))
23
+ parser = Yaparc::Seq.new(Yaparc::Symbol.new('scheme'),
24
+ Yaparc::Symbol.new(':'),
25
+ Yaparc::Alt.new(Natural.new,
26
+ Identifier.new))
13
27
  result = parser.parse("scheme:124")
14
28
  assert_instance_of Result::OK, result
15
29
  result = parser.parse("scheme:identifier")
@@ -17,7 +31,7 @@ class YaparcTest < Test::Unit::TestCase
17
31
  end
18
32
 
19
33
  def test_succeed_parse
20
- parser = ::Yaparc::SucceedParser.new(1)
34
+ parser = ::Yaparc::Succeed.new(1)
21
35
  result = parser.parse("abs")
22
36
  assert_equal 1, result.value
23
37
  assert_equal "abs", result.input
@@ -29,13 +43,13 @@ class YaparcTest < Test::Unit::TestCase
29
43
  end
30
44
 
31
45
  def test_fail_parse
32
- parser = ::Yaparc::FailParser.new
46
+ parser = ::Yaparc::Fail.new
33
47
  result = parser.parse("abc")
34
48
  assert_instance_of Result::Fail, result
35
49
  end
36
50
 
37
51
  def test_item_parse
38
- parser = ::Yaparc::ItemParser.new
52
+ parser = ::Yaparc::Item.new
39
53
  result = parser.parse("")
40
54
  assert_instance_of Result::Fail, result
41
55
  result = parser.parse("abc")
@@ -52,12 +66,12 @@ class YaparcTest < Test::Unit::TestCase
52
66
  false
53
67
  end
54
68
  end
55
- parser = SatisfyParser.new(is_integer)
69
+ parser = Satisfy.new(is_integer)
56
70
  result = parser.parse("123")
57
71
  assert_equal "1", result.value
58
72
  assert_equal "23", result.input
59
73
 
60
- parser = SatisfyParser.new(is_integer)
74
+ parser = Satisfy.new(is_integer)
61
75
  result = parser.parse("abc")
62
76
  assert_instance_of Result::Fail, result
63
77
 
@@ -69,58 +83,73 @@ class YaparcTest < Test::Unit::TestCase
69
83
  false
70
84
  end
71
85
  end
72
- parser = SatisfyParser.new(is_char)
86
+ parser = Satisfy.new(is_char)
73
87
  result = parser.parse("abc")
74
88
  assert_equal "a", result.value
75
89
  assert_equal "bc", result.input
76
90
  end
77
91
 
78
92
  def test_seq_parse
79
- parser = SeqParser.new(ItemParser.new, ItemParser.new) do |item1, item2|
93
+ parser = Seq.new(Item.new, Item.new) do |item1, item2|
80
94
  [item1, item2]
81
95
  end
82
96
  result = parser.parse("abcdef")
83
97
  assert_equal ["a", "b"], result.value
84
98
  assert_equal "cdef", result.input
85
99
 
86
- parser = SeqParser.new(ItemParser.new, ItemParser.new, ItemParser.new) do |item1, item2, item3|
100
+ parser = Seq.new(Item.new, Item.new, Item.new) do |item1, item2, item3|
87
101
  [item1, item3]
88
102
  end
89
103
  result = parser.parse("ABCDEF")
90
104
  assert_equal ["A", "C"], result.value
91
105
  assert_equal "DEF", result.input
92
106
 
93
- parser = SeqParser.new(ItemParser.new, ItemParser.new, ItemParser.new) do |item1, item2, item3|
107
+ parser = Seq.new(Item.new, Item.new, Item.new) do |item1, item2, item3|
94
108
  [item2]
95
109
  end
96
110
  result = parser.parse("ABCDEF")
97
111
  assert_equal ["B"], result.value
98
112
  assert_equal "DEF", result.input
113
+
114
+ parser = Seq.new(Digit.new, Many.new(Char.new('a'),''),Many.new(Digit.new,'')) do |digit, _,digits|
115
+ digit + digits
116
+ end
117
+ result = parser.parse("123abc")
118
+ assert_equal "123", result.value
119
+ assert_equal "abc", result.input
120
+
121
+ parser = Seq.new(
122
+ Yaparc::Apply.new(Yaparc::Tokenize.new(Digit.new)){|digit| digit}, Many.new(Char.new('a'),''),Many.new(Digit.new,'')) do |digit, _,digits|
123
+ digit + digits
124
+ end
125
+ result = parser.parse("123abc")
126
+ assert_equal "123", result.value
127
+ assert_equal "abc", result.input
99
128
  end
100
129
 
101
130
  def test_seq_parse_without_block
102
- parser = SeqParser.new(ItemParser.new, ItemParser.new)
131
+ parser = Seq.new(Item.new, Item.new)
103
132
  result = parser.parse("abcdef")
104
133
  assert_equal "b", result.value
105
134
  assert_equal "cdef", result.input
106
135
  end
107
136
 
108
137
  def test_alt_parse
109
- parser = AltParser.new(ItemParser.new, SucceedParser.new('d'))
138
+ parser = Alt.new(Item.new, Succeed.new('d'))
110
139
  result = parser.parse("abc")
111
140
  assert_equal "a", result.value
112
141
  assert_equal "bc", result.input
113
142
 
114
- parser = AltParser.new(FailParser.new, SucceedParser.new('d'))
143
+ parser = Alt.new(Fail.new, Succeed.new('d'))
115
144
  result = parser.parse("abc")
116
145
  assert_equal "d", result.value
117
146
  assert_equal "abc", result.input
118
147
 
119
- parser = AltParser.new(FailParser.new, FailParser.new)
148
+ parser = Alt.new(Fail.new, Fail.new)
120
149
  result = parser.parse("abc")
121
150
  assert_instance_of Result::Fail, result
122
151
 
123
- parser = AltParser.new(Natural.new, Ident.new)
152
+ parser = Alt.new(Natural.new, Ident.new)
124
153
  result = parser.parse("abc")
125
154
  assert_instance_of Result::OK, result
126
155
  result = parser.parse("124")
@@ -134,14 +163,14 @@ class YaparcTest < Test::Unit::TestCase
134
163
 
135
164
  def test_apply_parse
136
165
  is_digit = lambda {|i| i >= '0' and i <= '9'}
137
- parser = ApplyParser.new(SatisfyParser.new(is_digit)) do |digit|
166
+ parser = Apply.new(Satisfy.new(is_digit)) do |digit|
138
167
  digit.to_i - '0'.to_i
139
168
  end
140
169
  result = parser.parse('7')
141
170
  assert_equal 7, result.value
142
171
  assert_equal "", result.input
143
172
 
144
- parser = Yaparc::ApplyParser.new(Yaparc::RegexParser.new(/\d+/)) do |match|
173
+ parser = Yaparc::Apply.new(Yaparc::Regex.new(/\d+/)) do |match|
145
174
  Integer(match)
146
175
  end
147
176
  result = parser.parse('7')
@@ -149,50 +178,50 @@ class YaparcTest < Test::Unit::TestCase
149
178
  end
150
179
 
151
180
  def test_char_parse
152
- parser = CharParser.new("a")
181
+ parser = Char.new("a")
153
182
  result = parser.parse("abc")
154
183
  assert_equal "a", result.value
155
184
  assert_equal "bc", result.input
156
185
 
157
- parser = CharParser.new("a")
186
+ parser = Char.new("a")
158
187
  result = parser.parse("123")
159
188
  assert_instance_of Result::Fail, result
160
189
  end
161
190
 
162
191
  def test_string_parse
163
- parser = StringParser.new("abc")
192
+ parser = Yaparc::String.new("abc")
164
193
  result = parser.parse("abcdef")
165
194
  assert_equal "abc", result.value
166
195
  assert_equal "def", result.input
167
196
 
168
- parser = StringParser.new("abc")
197
+ parser = Yaparc::String.new("abc")
169
198
  result = parser.parse("ab1234")
170
199
  assert_instance_of Result::Fail, result
171
200
  end
172
201
 
173
202
  def test_regex_parse
174
- parser = RegexParser.new(/[a-z]/)
203
+ parser = Regex.new(/\A[a-z]/)
175
204
  result = parser.parse("abcdef")
176
205
  assert_equal "a", result.value
177
206
  assert_equal "bcdef", result.input
178
207
 
179
- parser = RegexParser.new(/[0-9]+/)
208
+ parser = Regex.new(/\A[0-9]+/)
180
209
  result = parser.parse("1234ab")
181
210
  assert_equal "1234", result.value
182
211
  assert_equal "ab", result.input
183
212
 
184
- parser = RegexParser.new(/[0-9]+/)
213
+ parser = Regex.new(/\A[0-9]+/)
185
214
  result = parser.parse("1234ab") do |match|
186
215
  Integer(match)
187
216
  end
188
217
  assert_equal 1234, result.value
189
218
 
190
- parser = RegexParser.new(/([0-9]+):([a-z]+)/)
219
+ parser = Regex.new(/([0-9]+):([a-z]+)/)
191
220
  result = parser.parse_with_parameter("1234:ab") do |match1, match2|
192
221
  assert_equal 'ab', match2
193
222
  end
194
223
 
195
- parser = RegexParser.new(/([0-9]+):([a-z]+)/) do |match1, match2|
224
+ parser = Regex.new(/([0-9]+):([a-z]+)/) do |match1, match2|
196
225
  [match2,match1]
197
226
  end
198
227
  result = parser.parse("1234:ab")
@@ -200,19 +229,19 @@ class YaparcTest < Test::Unit::TestCase
200
229
  end
201
230
 
202
231
  def test_zero_one_parse
203
- parser = ZeroOneParser.new(StringParser.new("abc"))
232
+ parser = ZeroOne.new(Yaparc::String.new("abc"))
204
233
  result = parser.parse("abc ")
205
234
  assert_equal "abc", result.value
206
235
  assert_equal " ", result.input
207
- parser = ZeroOneParser.new(StringParser.new("abc"))
236
+ parser = ZeroOne.new(Yaparc::String.new("abc"))
208
237
  result = parser.parse("123")
209
238
  assert_equal [], result.value
210
239
  assert_equal "123", result.input
211
240
  end
212
241
 
213
242
  def test_many_parse
214
- is_digit = SatisfyParser.new(lambda {|i| i >= '0' and i <= '9'})
215
- parser = ManyParser.new(is_digit,"")
243
+ is_digit = Satisfy.new(lambda {|i| i >= '0' and i <= '9'})
244
+ parser = Many.new(is_digit,"")
216
245
  result = parser.parse("123abc")
217
246
  assert_equal "123", result.value
218
247
  assert_equal "abc", result.input
@@ -220,11 +249,19 @@ class YaparcTest < Test::Unit::TestCase
220
249
  result = parser.parse("abcdef")
221
250
  assert_equal "", result.value
222
251
  assert_equal "abcdef", result.input
252
+
253
+ parser = Many.new(Alt.new(Ident.new, Nat.new),'')
254
+ result = parser.parse("abc23def")
255
+ assert_equal "abc23def", result.value
256
+
257
+ parser = Many.new(Digit.new,0)
258
+ result = parser.parse("abc")
259
+ assert_instance_of Result::OK, result
223
260
  end
224
261
 
225
262
  def test_many_one_parse
226
- is_digit = SatisfyParser.new(lambda {|i| i >= '0' and i <= '9'})
227
- parser = ManyOneParser.new(is_digit,"")
263
+ is_digit = Satisfy.new(lambda {|i| i >= '0' and i <= '9'})
264
+ parser = ManyOne.new(is_digit,"")
228
265
  result = parser.parse("123abc")
229
266
  assert_equal "123", result.value
230
267
  assert_equal "abc", result.input
@@ -232,6 +269,10 @@ class YaparcTest < Test::Unit::TestCase
232
269
  result = parser.parse("abcdef")
233
270
  assert_instance_of Result::Fail, result
234
271
  assert_equal "abcdef", result.input
272
+
273
+ parser = ManyOne.new(Char.new('a'),'')
274
+ result = parser.parse("123abc")
275
+ assert_instance_of Result::Fail, result
235
276
  end
236
277
 
237
278
  def test_ident
@@ -241,6 +282,13 @@ class YaparcTest < Test::Unit::TestCase
241
282
  assert_equal " def", result.input
242
283
  end
243
284
 
285
+ def test_digit
286
+ parser = Digit.new
287
+ result = parser.parse("123 abc")
288
+ assert_equal '1', result.value
289
+ assert_equal "23 abc", result.input
290
+ end
291
+
244
292
  def test_nat
245
293
  parser = Nat.new
246
294
  result = parser.parse("123 abc")
@@ -249,7 +297,7 @@ class YaparcTest < Test::Unit::TestCase
249
297
  end
250
298
 
251
299
  def test_nat_ident
252
- parser = SeqParser.new(Nat.new, Ident.new) do |nat, ident|
300
+ parser = Seq.new(Nat.new, Ident.new) do |nat, ident|
253
301
  [nat,ident]
254
302
  end
255
303
  result = parser.parse("123abc")
@@ -279,9 +327,9 @@ class YaparcTest < Test::Unit::TestCase
279
327
  # end
280
328
 
281
329
  def test_tokenize_with_block
282
- parser = TokenizeParser.new(Ident.new) do |tokenize|
283
- tokenize.prefix = SpaceParser.new
284
- tokenize.postfix = SpaceParser.new
330
+ parser = Tokenize.new(Ident.new) do |tokenize|
331
+ tokenize.prefix = Space.new
332
+ tokenize.postfix = Space.new
285
333
  end
286
334
 
287
335
  result = parser.parse(" abc")
@@ -293,9 +341,9 @@ class YaparcTest < Test::Unit::TestCase
293
341
  assert_instance_of Result::Fail, result
294
342
  assert_equal "\n abc", result.input
295
343
 
296
- parser = TokenizeParser.new(Ident.new) do |tokenize|
297
- tokenize.prefix = WhiteSpaceParser.new
298
- tokenize.postfix = WhiteSpaceParser.new
344
+ parser = Tokenize.new(Ident.new) do |tokenize|
345
+ tokenize.prefix = WhiteSpace.new
346
+ tokenize.postfix = WhiteSpace.new
299
347
  end
300
348
 
301
349
  result = parser.parse(" \n abc")
@@ -305,14 +353,14 @@ class YaparcTest < Test::Unit::TestCase
305
353
  end
306
354
 
307
355
  def test_tokenize_without_block
308
- parser = TokenizeParser.new(Ident.new, :prefix => WhiteSpaceParser.new, :postfix => WhiteSpaceParser.new)
356
+ parser = Tokenize.new(Ident.new, :prefix => WhiteSpace.new, :postfix => WhiteSpace.new)
309
357
 
310
358
  result = parser.parse(" abc")
311
359
  assert_instance_of Result::OK, result
312
360
  assert_equal "abc", result.value
313
361
  assert_equal "", result.input
314
362
 
315
- parser = TokenizeParser.new(Ident.new, :prefix => SpaceParser.new, :postfix => SpaceParser.new)
363
+ parser = Tokenize.new(Ident.new, :prefix => Space.new, :postfix => Space.new)
316
364
  result = parser.parse(" \n abc")
317
365
  assert_instance_of Result::Fail, result
318
366
  assert_equal "\n abc", result.input
@@ -336,6 +384,7 @@ class YaparcTest < Test::Unit::TestCase
336
384
  result = parser_with_keyword.parse(" xyz")
337
385
  assert_equal "xyz", result.value
338
386
  assert_equal "", result.input
387
+
339
388
  end
340
389
 
341
390
  def test_natural
@@ -353,7 +402,7 @@ class YaparcTest < Test::Unit::TestCase
353
402
  end
354
403
 
355
404
  def test_literal_parser
356
- parser = LiteralParser.new('%')
405
+ parser = Literal.new('%')
357
406
  result = parser.parse(" % ")
358
407
  assert_equal "%", result.value
359
408
  assert_equal "", result.input
@@ -31,7 +31,7 @@ module SQL
31
31
 
32
32
  def initialize
33
33
  @parser = lambda do
34
- Yaparc::SeqParser.new(SelectExpression.new,
34
+ Yaparc::Seq.new(SelectExpression.new,
35
35
  FromExpression.new,
36
36
  WhereExpression.new) do |select, from, where|
37
37
  {:select => select, :from => from, :where => where }
@@ -46,7 +46,7 @@ module SQL
46
46
 
47
47
  def initialize
48
48
  @parser = lambda do
49
- Yaparc::SeqParser.new(
49
+ Yaparc::Seq.new(
50
50
  Yaparc::Symbol.new('select'),
51
51
  TermSequence.new) do |_,terms|
52
52
  terms
@@ -61,18 +61,15 @@ module SQL
61
61
 
62
62
  def initialize
63
63
  @parser = lambda do
64
- Yaparc::SeqParser.new(
65
- Term.new,
66
- Yaparc::ManyParser.new(
67
- Yaparc::SeqParser.new(
68
- Yaparc::Symbol.new(','),
69
- TermSequence.new) do |_, terms|
70
- terms
71
- end
72
- # end,
73
- # []
74
- )
75
- ) do |term,terms|
64
+ Yaparc::Seq.new(
65
+ Term.new,
66
+ Yaparc::Many.new(
67
+ Yaparc::Seq.new(
68
+ Yaparc::Symbol.new(','),
69
+ TermSequence.new) do |_, terms|
70
+ terms
71
+ end)
72
+ ) do |term,terms|
76
73
  [term] + terms
77
74
  end
78
75
  end
@@ -85,16 +82,16 @@ module SQL
85
82
 
86
83
  def initialize
87
84
  @parser = lambda do
88
- Yaparc::SeqParser.new(
89
- Yaparc::Symbol.new('from'),
90
- PathExpression.new,
91
- Yaparc::ManyParser.new(
92
- Yaparc::SeqParser.new(
93
- Yaparc::Symbol.new(','),
94
- PathExpression.new) do |_, path|
95
- [path]
96
- end)
97
- ) do |_,path,paths|
85
+ Yaparc::Seq.new(
86
+ Yaparc::Symbol.new('from'),
87
+ PathExpression.new,
88
+ Yaparc::Many.new(
89
+ Yaparc::Seq.new(
90
+ Yaparc::Symbol.new(','),
91
+ PathExpression.new) do |_, path|
92
+ [path]
93
+ end)
94
+ ) do |_,path,paths|
98
95
  path + paths
99
96
  end
100
97
  end
@@ -108,10 +105,10 @@ module SQL
108
105
 
109
106
  def initialize
110
107
  @parser = lambda do
111
- Yaparc::SeqParser.new(
108
+ Yaparc::Seq.new(
112
109
  Yaparc::Symbol.new('/'),
113
110
  Term.new,
114
- Yaparc::ManyParser.new(
111
+ Yaparc::Many.new(
115
112
  PathExpression.new do |path|
116
113
  path
117
114
  end)
@@ -129,7 +126,7 @@ module SQL
129
126
 
130
127
  def initialize
131
128
  @parser = lambda do
132
- Yaparc::ManyParser.new(SearchCond.new)
129
+ Yaparc::Many.new(SearchCond.new)
133
130
  end
134
131
  end
135
132
  end
@@ -159,74 +156,74 @@ module SQL
159
156
 
160
157
  def initialize
161
158
  @parser = lambda do
162
- Yaparc::AltParser.new(
163
- Yaparc::SeqParser.new(Term.new,
164
- Op.new,
165
- Term.new) do |term1, op, term2|
166
- {:operator => op, :args => [term1, term2]}
167
- end,
168
- Yaparc::SeqParser.new(Yaparc::Symbol.new('('),
169
- Yaparc::Symbol.new('NOT'),
170
- SearchCond.new,
171
- Yaparc::Symbol.new(')')) do |_, _, cond, _|
172
- {:logic => :not, :conditions => [cond]}
173
- end,
174
- Yaparc::SeqParser.new(Yaparc::Symbol.new('('),
175
- SearchCond.new,
176
- Yaparc::Symbol.new('AND'),
177
- SearchCond.new,
178
- Yaparc::Symbol.new(')')) do |_, cond1, _,cond2,_|
179
- {:logic => :and, :conditions => [cond1, cond2]}
180
- end,
181
- Yaparc::SeqParser.new(Yaparc::Symbol.new('('),
182
- SearchCond.new,
183
- Yaparc::Symbol.new('OR'),
184
- SearchCond.new,
185
- Yaparc::Symbol.new(')')) do |_, cond1, _,cond2,_|
186
- {:logic => :or, :conditions => [cond1,cond2]}
187
- end,
188
- Yaparc::SeqParser.new(Yaparc::Symbol.new('EXISTS'),
189
- Yaparc::Symbol.new('('),
190
- QueryBody.new,
191
- Yaparc::Symbol.new(')')) do |_, _, body,_|
192
- {:logic => :exits, :condition => body}
193
- end,
194
- # term op ANY ( query_body )
195
- Yaparc::SeqParser.new(Term.new,
196
- Op.new,
197
- Yaparc::Symbol.new('ANY'),
198
- Yaparc::Symbol.new('('),
199
- QueryBody.new,
200
- Yaparc::Symbol.new(')')) do |term, op, _, _, body,_|
201
- {:operator => op,
202
- :term1 => term,
203
- :term2 => {:logic => :any, :condition => body}
204
- }
205
- end,
206
- # term op ALL ( query_body )
207
- Yaparc::SeqParser.new(Term.new,
208
- Op.new,
209
- Yaparc::Symbol.new('ALL'),
210
- Yaparc::Symbol.new('('),
211
- QueryBody.new,
212
- Yaparc::Symbol.new(')')) do |term, op, _, _, body,_|
213
- {:operator => op,
214
- :term1 => term,
215
- :term2 => {:logic => :ALL, :condition => body}
216
- }
217
- end,
218
- # term IN ( query_body )
219
- Yaparc::SeqParser.new(Term.new,
220
- Op.new,
221
- Yaparc::Symbol.new('IN'),
222
- Yaparc::Symbol.new('('),
223
- QueryBody.new,
224
- Yaparc::Symbol.new(')')) do |term, op, _, _, body,_|
225
- {:operator => op,
226
- :term1 => term,
227
- :term2 => {:logic => :IN, :condition => body}
228
- }
229
- end)
159
+ Yaparc::Alt.new(
160
+ Yaparc::Seq.new(Term.new,
161
+ Op.new,
162
+ Term.new) do |term1, op, term2|
163
+ {:operator => op, :args => [term1, term2]}
164
+ end,
165
+ Yaparc::Seq.new(Yaparc::Symbol.new('('),
166
+ Yaparc::Symbol.new('NOT'),
167
+ SearchCond.new,
168
+ Yaparc::Symbol.new(')')) do |_, _, cond, _|
169
+ {:logic => :not, :conditions => [cond]}
170
+ end,
171
+ Yaparc::Seq.new(Yaparc::Symbol.new('('),
172
+ SearchCond.new,
173
+ Yaparc::Symbol.new('AND'),
174
+ SearchCond.new,
175
+ Yaparc::Symbol.new(')')) do |_, cond1, _,cond2,_|
176
+ {:logic => :and, :conditions => [cond1, cond2]}
177
+ end,
178
+ Yaparc::Seq.new(Yaparc::Symbol.new('('),
179
+ SearchCond.new,
180
+ Yaparc::Symbol.new('OR'),
181
+ SearchCond.new,
182
+ Yaparc::Symbol.new(')')) do |_, cond1, _,cond2,_|
183
+ {:logic => :or, :conditions => [cond1,cond2]}
184
+ end,
185
+ Yaparc::Seq.new(Yaparc::Symbol.new('EXISTS'),
186
+ Yaparc::Symbol.new('('),
187
+ QueryBody.new,
188
+ Yaparc::Symbol.new(')')) do |_, _, body,_|
189
+ {:logic => :exits, :condition => body}
190
+ end,
191
+ # term op ANY ( query_body )
192
+ Yaparc::Seq.new(Term.new,
193
+ Op.new,
194
+ Yaparc::Symbol.new('ANY'),
195
+ Yaparc::Symbol.new('('),
196
+ QueryBody.new,
197
+ Yaparc::Symbol.new(')')) do |term, op, _, _, body,_|
198
+ {:operator => op,
199
+ :term1 => term,
200
+ :term2 => {:logic => :any, :condition => body}
201
+ }
202
+ end,
203
+ # term op ALL ( query_body )
204
+ Yaparc::Seq.new(Term.new,
205
+ Op.new,
206
+ Yaparc::Symbol.new('ALL'),
207
+ Yaparc::Symbol.new('('),
208
+ QueryBody.new,
209
+ Yaparc::Symbol.new(')')) do |term, op, _, _, body,_|
210
+ {:operator => op,
211
+ :term1 => term,
212
+ :term2 => {:logic => :ALL, :condition => body}
213
+ }
214
+ end,
215
+ # term IN ( query_body )
216
+ Yaparc::Seq.new(Term.new,
217
+ Op.new,
218
+ Yaparc::Symbol.new('IN'),
219
+ Yaparc::Symbol.new('('),
220
+ QueryBody.new,
221
+ Yaparc::Symbol.new(')')) do |term, op, _, _, body,_|
222
+ {:operator => op,
223
+ :term1 => term,
224
+ :term2 => {:logic => :IN, :condition => body}
225
+ }
226
+ end)
230
227
  end
231
228
  end
232
229
  end
@@ -237,12 +234,12 @@ module SQL
237
234
 
238
235
  def initialize
239
236
  @parser = lambda do
240
- Yaparc::AltParser.new(
241
- Yaparc::ApplyParser.new(Yaparc::Symbol.new('<>')) {|_| :not},
242
- Yaparc::ApplyParser.new(Yaparc::Symbol.new('<=')) {|_| :lesser_eq },
243
- Yaparc::ApplyParser.new(Yaparc::Symbol.new('>=')) {|_| :greater_eq },
244
- Yaparc::ApplyParser.new(Yaparc::Symbol.new('<')) {|_| :lesser},
245
- Yaparc::ApplyParser.new(Yaparc::Symbol.new('>')) {|_| :greater })
237
+ Yaparc::Alt.new(
238
+ Yaparc::Apply.new(Yaparc::Symbol.new('<>')) {|_| :not},
239
+ Yaparc::Apply.new(Yaparc::Symbol.new('<=')) {|_| :lesser_eq },
240
+ Yaparc::Apply.new(Yaparc::Symbol.new('>=')) {|_| :greater_eq },
241
+ Yaparc::Apply.new(Yaparc::Symbol.new('<')) {|_| :lesser},
242
+ Yaparc::Apply.new(Yaparc::Symbol.new('>')) {|_| :greater })
246
243
  end
247
244
  end
248
245
  end
@@ -252,11 +249,6 @@ end # of SQL
252
249
  class YaparcQueryTest < Test::Unit::TestCase
253
250
  include ::Yaparc
254
251
 
255
- # def setup
256
- # @expr = Expr.new
257
- # @factor = Factor.new
258
- # end
259
-
260
252
  def test_op
261
253
  op = SQL::Op.new
262
254
  result = op.parse("<")