predicator 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.md +5 -0
- data/lib/predicator/context.rb +3 -4
- data/lib/predicator/generated_parser.rb +150 -86
- data/lib/predicator/lexer.rb +32 -8
- data/lib/predicator/parser.rb +8 -1
- data/lib/predicator/parser.y +16 -10
- data/lib/predicator/predicates/between.rb +23 -0
- data/lib/predicator/predicates/equal.rb +9 -0
- data/lib/predicator/predicates/greater_than.rb +9 -0
- data/lib/predicator/predicates/greater_than_or_equal.rb +9 -0
- data/lib/predicator/predicates/less_than.rb +9 -0
- data/lib/predicator/predicates/less_than_or_equal.rb +9 -0
- data/lib/predicator/predicates/not_equal.rb +9 -0
- data/lib/predicator/predicates/{equals.rb → relation.rb} +1 -5
- data/lib/predicator/variable.rb +1 -1
- data/lib/predicator/version.rb +1 -1
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6f75523bd14777d85c7d52472823bad7eafa31f
|
4
|
+
data.tar.gz: cbf63f511abaccbac93ed564256d5d0caea7da87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c0c9e0fa3737b4c6f1ec27a20254197fbe0a52825f37cb2978c02c829473d3fd3777f5e5937cb08c754783acc0c1a9188f8e31054a4ab4eb1dfab325873c68a
|
7
|
+
data.tar.gz: af32c18e7d32ccf7047f02d7bafaa71fbb7d3fa0b7383d47f78854440fdb1ef45884d832f37e1ff364ca19a5ff90783fe6715b4e33c9b7e247ff6cb169a80444
|
data/HISTORY.md
CHANGED
data/lib/predicator/context.rb
CHANGED
@@ -2,17 +2,16 @@ require "ostruct"
|
|
2
2
|
|
3
3
|
module Predicator
|
4
4
|
class Context
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :bindings
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
@
|
8
|
+
@bindings = {}
|
9
9
|
end
|
10
10
|
|
11
11
|
def bind name, value
|
12
12
|
value = OpenStruct.new(value) if value.kind_of? Hash
|
13
|
-
|
13
|
+
bindings[name.to_s] = value
|
14
14
|
end
|
15
|
-
alias :[]= :bind
|
16
15
|
|
17
16
|
def value_for input
|
18
17
|
return input unless input.kind_of? Predicator::Variable
|
@@ -10,76 +10,92 @@ module Predicator
|
|
10
10
|
##### State transition tables begin ###
|
11
11
|
|
12
12
|
racc_action_table = [
|
13
|
-
9,
|
14
|
-
9,
|
15
|
-
9,
|
16
|
-
9, nil,
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
9, 31, 32, 7, 8, 14, 15, 16, 17, 18,
|
14
|
+
9, 43, 6, 7, 8, 14, 15, 16, 17, 18,
|
15
|
+
9, 44, 6, 7, 8, 14, 15, 16, 17, 18,
|
16
|
+
9, nil, 6, 7, 8, 14, 15, 16, 17, 18,
|
17
|
+
9, nil, 6, 7, 8, 14, 15, 16, 17, 18,
|
18
|
+
20, 21, 6, 19, nil, nil, 20, 21, nil, 22,
|
19
|
+
nil, nil, 42, 23, 28, 27, 26, 25, 24, 14,
|
20
|
+
15, 16, 17, 18, 14, 15, 16, 17, 18, 14,
|
21
|
+
15, 16, 17, 18, 14, 15, 16, 17, 18, 14,
|
22
|
+
15, 16, 17, 18, 14, 15, 16, 17, 18, 14,
|
23
|
+
15, 16, 17, 18, 14, 15, 16, 17, 18 ]
|
20
24
|
|
21
25
|
racc_action_check = [
|
22
|
-
0,
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
0, 18, 19, 0, 0, 0, 0, 0, 0, 0,
|
27
|
+
6, 31, 0, 6, 6, 6, 6, 6, 6, 6,
|
28
|
+
9, 35, 6, 9, 9, 9, 9, 9, 9, 9,
|
29
|
+
20, nil, 9, 20, 20, 20, 20, 20, 20, 20,
|
30
|
+
21, nil, 20, 21, 21, 21, 21, 21, 21, 21,
|
31
|
+
29, 29, 21, 1, nil, nil, 1, 1, nil, 5,
|
32
|
+
nil, nil, 29, 5, 5, 5, 5, 5, 5, 22,
|
33
|
+
22, 22, 22, 22, 23, 23, 23, 23, 23, 24,
|
34
|
+
24, 24, 24, 24, 25, 25, 25, 25, 25, 26,
|
35
|
+
26, 26, 26, 26, 27, 27, 27, 27, 27, 28,
|
36
|
+
28, 28, 28, 28, 44, 44, 44, 44, 44 ]
|
29
37
|
|
30
38
|
racc_action_pointer = [
|
31
|
-
-2,
|
32
|
-
nil, nil, nil, nil, nil, nil, nil, nil, -
|
33
|
-
|
34
|
-
nil, nil
|
39
|
+
-2, 53, nil, nil, nil, 47, 8, nil, nil, 18,
|
40
|
+
nil, nil, nil, nil, nil, nil, nil, nil, -12, 2,
|
41
|
+
28, 38, 62, 67, 72, 77, 82, 87, 92, 47,
|
42
|
+
nil, 0, nil, nil, nil, 18, nil, nil, nil, nil,
|
43
|
+
nil, nil, nil, nil, 97, nil ]
|
35
44
|
|
36
45
|
racc_action_default = [
|
37
|
-
-
|
38
|
-
-
|
39
|
-
-
|
40
|
-
-
|
46
|
+
-26, -26, -1, -2, -3, -26, -26, -12, -13, -26,
|
47
|
+
-17, -18, -19, -20, -21, -22, -23, -24, -26, -26,
|
48
|
+
-26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
|
49
|
+
-16, -26, 46, -14, -15, -26, -6, -7, -8, -9,
|
50
|
+
-10, -11, -5, -25, -26, -4 ]
|
41
51
|
|
42
52
|
racc_goto_table = [
|
43
|
-
|
44
|
-
nil, nil, nil,
|
45
|
-
|
53
|
+
35, 36, 37, 38, 39, 40, 41, 1, nil, nil,
|
54
|
+
nil, nil, nil, 29, nil, nil, 30, nil, nil, nil,
|
55
|
+
nil, nil, 45, nil, nil, nil, nil, 33, 34 ]
|
46
56
|
|
47
57
|
racc_goto_check = [
|
48
|
-
|
49
|
-
nil, nil, nil,
|
50
|
-
1, 1 ]
|
58
|
+
5, 5, 5, 5, 5, 5, 5, 1, nil, nil,
|
59
|
+
nil, nil, nil, 1, nil, nil, 1, nil, nil, nil,
|
60
|
+
nil, nil, 5, nil, nil, nil, nil, 1, 1 ]
|
51
61
|
|
52
62
|
racc_goto_pointer = [
|
53
|
-
nil,
|
63
|
+
nil, 7, nil, nil, nil, -22, nil, nil, nil, nil ]
|
54
64
|
|
55
65
|
racc_goto_default = [
|
56
|
-
nil, nil, 2, 3, 4,
|
66
|
+
nil, nil, 2, 3, 4, 5, 10, 11, 12, 13 ]
|
57
67
|
|
58
68
|
racc_reduce_table = [
|
59
69
|
0, 0, :racc_error,
|
60
|
-
1,
|
61
|
-
1,
|
62
|
-
1,
|
63
|
-
|
64
|
-
3,
|
65
|
-
|
66
|
-
|
67
|
-
3,
|
68
|
-
3,
|
69
|
-
|
70
|
-
|
71
|
-
1,
|
72
|
-
1,
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
1,
|
77
|
-
1,
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
70
|
+
1, 23, :_reduce_none,
|
71
|
+
1, 23, :_reduce_none,
|
72
|
+
1, 23, :_reduce_none,
|
73
|
+
5, 23, :_reduce_4,
|
74
|
+
3, 23, :_reduce_none,
|
75
|
+
3, 24, :_reduce_6,
|
76
|
+
3, 24, :_reduce_7,
|
77
|
+
3, 24, :_reduce_8,
|
78
|
+
3, 24, :_reduce_9,
|
79
|
+
3, 24, :_reduce_10,
|
80
|
+
3, 24, :_reduce_11,
|
81
|
+
1, 25, :_reduce_12,
|
82
|
+
1, 25, :_reduce_13,
|
83
|
+
3, 26, :_reduce_14,
|
84
|
+
3, 26, :_reduce_15,
|
85
|
+
2, 26, :_reduce_16,
|
86
|
+
1, 27, :_reduce_none,
|
87
|
+
1, 27, :_reduce_none,
|
88
|
+
1, 28, :_reduce_none,
|
89
|
+
1, 28, :_reduce_none,
|
90
|
+
1, 30, :_reduce_21,
|
91
|
+
1, 31, :_reduce_22,
|
92
|
+
1, 31, :_reduce_23,
|
93
|
+
1, 31, :_reduce_24,
|
94
|
+
3, 29, :_reduce_25 ]
|
95
|
+
|
96
|
+
racc_reduce_n = 26
|
97
|
+
|
98
|
+
racc_shift_n = 46
|
83
99
|
|
84
100
|
racc_token_table = {
|
85
101
|
false => 0,
|
@@ -94,12 +110,18 @@ racc_token_table = {
|
|
94
110
|
:tINTEGER => 9,
|
95
111
|
:tDATE => 10,
|
96
112
|
:tIDENTIFIER => 11,
|
97
|
-
:
|
98
|
-
:
|
113
|
+
:tBETWEEN => 12,
|
114
|
+
:tDOT => 13,
|
99
115
|
:tLPAREN => 14,
|
100
|
-
:tRPAREN => 15
|
116
|
+
:tRPAREN => 15,
|
117
|
+
:tEQ => 16,
|
118
|
+
:tNEQ => 17,
|
119
|
+
:tLEQ => 18,
|
120
|
+
:tGEQ => 19,
|
121
|
+
:tLT => 20,
|
122
|
+
:tGT => 21 }
|
101
123
|
|
102
|
-
racc_nt_base =
|
124
|
+
racc_nt_base = 22
|
103
125
|
|
104
126
|
racc_use_result_var = false
|
105
127
|
|
@@ -132,13 +154,19 @@ Racc_token_to_s_table = [
|
|
132
154
|
"tINTEGER",
|
133
155
|
"tDATE",
|
134
156
|
"tIDENTIFIER",
|
157
|
+
"tBETWEEN",
|
135
158
|
"tDOT",
|
136
|
-
"tEQUAL",
|
137
159
|
"tLPAREN",
|
138
160
|
"tRPAREN",
|
161
|
+
"tEQ",
|
162
|
+
"tNEQ",
|
163
|
+
"tLEQ",
|
164
|
+
"tGEQ",
|
165
|
+
"tLT",
|
166
|
+
"tGT",
|
139
167
|
"$start",
|
140
168
|
"predicate",
|
141
|
-
"
|
169
|
+
"relation_predicate",
|
142
170
|
"boolean_predicate",
|
143
171
|
"logical_predicate",
|
144
172
|
"value",
|
@@ -159,78 +187,114 @@ Racc_debug_parser = false
|
|
159
187
|
|
160
188
|
# reduce 3 omitted
|
161
189
|
|
162
|
-
|
190
|
+
module_eval(<<'.,.,', 'parser.y', 13)
|
191
|
+
def _reduce_4(val, _values)
|
192
|
+
Predicator::Predicates::Between.new val[0], val[2], val[4]
|
193
|
+
end
|
194
|
+
.,.,
|
195
|
+
|
196
|
+
# reduce 5 omitted
|
163
197
|
|
164
|
-
module_eval(<<'.,.,', 'parser.y',
|
165
|
-
def
|
166
|
-
Predicator::Predicates::
|
198
|
+
module_eval(<<'.,.,', 'parser.y', 17)
|
199
|
+
def _reduce_6(val, _values)
|
200
|
+
Predicator::Predicates::Equal.new val[0], val[2]
|
201
|
+
end
|
202
|
+
.,.,
|
203
|
+
|
204
|
+
module_eval(<<'.,.,', 'parser.y', 18)
|
205
|
+
def _reduce_7(val, _values)
|
206
|
+
Predicator::Predicates::GreaterThan.new val[0], val[2]
|
167
207
|
end
|
168
208
|
.,.,
|
169
209
|
|
170
210
|
module_eval(<<'.,.,', 'parser.y', 19)
|
171
|
-
def
|
172
|
-
Predicator::Predicates::
|
211
|
+
def _reduce_8(val, _values)
|
212
|
+
Predicator::Predicates::LessThan.new val[0], val[2]
|
173
213
|
end
|
174
214
|
.,.,
|
175
215
|
|
176
216
|
module_eval(<<'.,.,', 'parser.y', 20)
|
177
|
-
def
|
217
|
+
def _reduce_9(val, _values)
|
218
|
+
Predicator::Predicates::GreaterThanOrEqual.new val[0], val[2]
|
219
|
+
end
|
220
|
+
.,.,
|
221
|
+
|
222
|
+
module_eval(<<'.,.,', 'parser.y', 21)
|
223
|
+
def _reduce_10(val, _values)
|
224
|
+
Predicator::Predicates::LessThanOrEqual.new val[0], val[2]
|
225
|
+
end
|
226
|
+
.,.,
|
227
|
+
|
228
|
+
module_eval(<<'.,.,', 'parser.y', 22)
|
229
|
+
def _reduce_11(val, _values)
|
230
|
+
Predicator::Predicates::NotEqual.new val[0], val[2]
|
231
|
+
end
|
232
|
+
.,.,
|
233
|
+
|
234
|
+
module_eval(<<'.,.,', 'parser.y', 25)
|
235
|
+
def _reduce_12(val, _values)
|
236
|
+
Predicator::Predicates::True.new
|
237
|
+
end
|
238
|
+
.,.,
|
239
|
+
|
240
|
+
module_eval(<<'.,.,', 'parser.y', 26)
|
241
|
+
def _reduce_13(val, _values)
|
178
242
|
Predicator::Predicates::False.new
|
179
243
|
end
|
180
244
|
.,.,
|
181
245
|
|
182
|
-
module_eval(<<'.,.,', 'parser.y',
|
183
|
-
def
|
246
|
+
module_eval(<<'.,.,', 'parser.y', 29)
|
247
|
+
def _reduce_14(val, _values)
|
184
248
|
Predicator::Predicates::And.new [val[0], val[2]]
|
185
249
|
end
|
186
250
|
.,.,
|
187
251
|
|
188
|
-
module_eval(<<'.,.,', 'parser.y',
|
189
|
-
def
|
252
|
+
module_eval(<<'.,.,', 'parser.y', 30)
|
253
|
+
def _reduce_15(val, _values)
|
190
254
|
Predicator::Predicates::Or.new [val[0], val[2]]
|
191
255
|
end
|
192
256
|
.,.,
|
193
257
|
|
194
|
-
module_eval(<<'.,.,', 'parser.y',
|
195
|
-
def
|
258
|
+
module_eval(<<'.,.,', 'parser.y', 31)
|
259
|
+
def _reduce_16(val, _values)
|
196
260
|
Predicator::Predicates::Not.new val[0]
|
197
261
|
end
|
198
262
|
.,.,
|
199
263
|
|
200
|
-
# reduce
|
264
|
+
# reduce 17 omitted
|
201
265
|
|
202
|
-
# reduce
|
266
|
+
# reduce 18 omitted
|
203
267
|
|
204
|
-
# reduce
|
268
|
+
# reduce 19 omitted
|
205
269
|
|
206
|
-
# reduce
|
270
|
+
# reduce 20 omitted
|
207
271
|
|
208
|
-
module_eval(<<'.,.,', 'parser.y',
|
209
|
-
def
|
272
|
+
module_eval(<<'.,.,', 'parser.y', 42)
|
273
|
+
def _reduce_21(val, _values)
|
210
274
|
val[0]
|
211
275
|
end
|
212
276
|
.,.,
|
213
277
|
|
214
|
-
module_eval(<<'.,.,', 'parser.y',
|
215
|
-
def
|
278
|
+
module_eval(<<'.,.,', 'parser.y', 45)
|
279
|
+
def _reduce_22(val, _values)
|
216
280
|
val[0].to_f
|
217
281
|
end
|
218
282
|
.,.,
|
219
283
|
|
220
|
-
module_eval(<<'.,.,', 'parser.y',
|
221
|
-
def
|
284
|
+
module_eval(<<'.,.,', 'parser.y', 46)
|
285
|
+
def _reduce_23(val, _values)
|
222
286
|
val[0].to_i
|
223
287
|
end
|
224
288
|
.,.,
|
225
289
|
|
226
|
-
module_eval(<<'.,.,', 'parser.y',
|
227
|
-
def
|
290
|
+
module_eval(<<'.,.,', 'parser.y', 47)
|
291
|
+
def _reduce_24(val, _values)
|
228
292
|
Date.new *val[0]
|
229
293
|
end
|
230
294
|
.,.,
|
231
295
|
|
232
|
-
module_eval(<<'.,.,', 'parser.y',
|
233
|
-
def
|
296
|
+
module_eval(<<'.,.,', 'parser.y', 50)
|
297
|
+
def _reduce_25(val, _values)
|
234
298
|
Predicator::Variable.new val[0], val[2]
|
235
299
|
end
|
236
300
|
.,.,
|
data/lib/predicator/lexer.rb
CHANGED
@@ -5,10 +5,15 @@ module Predicator
|
|
5
5
|
class Lexer
|
6
6
|
SPACE = /[ \t\r\n]/
|
7
7
|
DOT = /\./
|
8
|
-
BANG = /!/
|
9
|
-
EQUAL = /=/
|
10
8
|
LPAREN = /\(/
|
11
9
|
RPAREN = /\)/
|
10
|
+
NEQ = /!=/
|
11
|
+
GEQ = />=/
|
12
|
+
LEQ = /<=/
|
13
|
+
GT = />/
|
14
|
+
LT = /</
|
15
|
+
EQ = /=/
|
16
|
+
BANG = /!/
|
12
17
|
DATE = /(\d{4})-(\d{2})-(\d{2})/i
|
13
18
|
FLOAT = /[+-]?(?:[0-9_]+\.[0-9_]*|\.[0-9_]+|\d+(?=[eE]))(?:[eE][+-]?[0-9_]+)?\b/
|
14
19
|
INTEGER = /[+-]?\d(_?\d)*\b/
|
@@ -16,6 +21,7 @@ module Predicator
|
|
16
21
|
FALSE = /false\b/
|
17
22
|
AND = /and/i
|
18
23
|
OR = /or/i
|
24
|
+
BETWEEN = /between/i
|
19
25
|
STRING = /(["])(?:\\?.)*?\1/
|
20
26
|
IDENTIFIER = /[a-z][A-Za-z0-9_]*/
|
21
27
|
|
@@ -42,18 +48,33 @@ module Predicator
|
|
42
48
|
when text = @ss.scan(DOT)
|
43
49
|
@tokens.push [:tDOT, text]
|
44
50
|
|
45
|
-
when text = @ss.scan(BANG)
|
46
|
-
@tokens.push [:tBANG, text]
|
47
|
-
|
48
|
-
when text = @ss.scan(EQUAL)
|
49
|
-
@tokens.push [:tEQUAL, text]
|
50
|
-
|
51
51
|
when text = @ss.scan(LPAREN)
|
52
52
|
@tokens.push [:tLPAREN, text]
|
53
53
|
|
54
54
|
when text = @ss.scan(RPAREN)
|
55
55
|
@tokens.push [:tRPAREN, text]
|
56
56
|
|
57
|
+
when text = @ss.scan(NEQ)
|
58
|
+
@tokens.push [:tNEQ, text]
|
59
|
+
|
60
|
+
when text = @ss.scan(GEQ)
|
61
|
+
@tokens.push [:tGEQ, text]
|
62
|
+
|
63
|
+
when text = @ss.scan(LEQ)
|
64
|
+
@tokens.push [:tLEQ, text]
|
65
|
+
|
66
|
+
when text = @ss.scan(GT)
|
67
|
+
@tokens.push [:tGT, text]
|
68
|
+
|
69
|
+
when text = @ss.scan(LT)
|
70
|
+
@tokens.push [:tLT, text]
|
71
|
+
|
72
|
+
when text = @ss.scan(EQ)
|
73
|
+
@tokens.push [:tEQ, text]
|
74
|
+
|
75
|
+
when text = @ss.scan(BANG)
|
76
|
+
@tokens.push [:tBANG, text]
|
77
|
+
|
57
78
|
when text = @ss.scan(DATE)
|
58
79
|
args = [ @ss[1], @ss[2], @ss[3] ].map(&:to_i)
|
59
80
|
@tokens.push [:tDATE, args]
|
@@ -76,6 +97,9 @@ module Predicator
|
|
76
97
|
when text = @ss.scan(OR)
|
77
98
|
@tokens.push [:tOR, text]
|
78
99
|
|
100
|
+
when text = @ss.scan(BETWEEN)
|
101
|
+
@tokens.push [:tBETWEEN, text]
|
102
|
+
|
79
103
|
when text = @ss.scan(STRING)
|
80
104
|
@tokens.push [:tSTRING, text[1..-2]]
|
81
105
|
|
data/lib/predicator/parser.rb
CHANGED
@@ -4,7 +4,14 @@ require "predicator/generated_parser"
|
|
4
4
|
require "predicator/lexer"
|
5
5
|
require "predicator/variable"
|
6
6
|
|
7
|
-
require "predicator/predicates/
|
7
|
+
require "predicator/predicates/relation"
|
8
|
+
require "predicator/predicates/equal"
|
9
|
+
require "predicator/predicates/not_equal"
|
10
|
+
require "predicator/predicates/greater_than"
|
11
|
+
require "predicator/predicates/less_than"
|
12
|
+
require "predicator/predicates/greater_than_or_equal"
|
13
|
+
require "predicator/predicates/less_than_or_equal"
|
14
|
+
require "predicator/predicates/between"
|
8
15
|
require "predicator/predicates/true"
|
9
16
|
require "predicator/predicates/false"
|
10
17
|
require "predicator/predicates/and"
|
data/lib/predicator/parser.y
CHANGED
@@ -4,26 +4,32 @@ prechigh
|
|
4
4
|
right tBANG
|
5
5
|
left tAND tOR
|
6
6
|
preclow
|
7
|
-
token tTRUE tFALSE tSTRING tFLOAT tINTEGER tDATE tIDENTIFIER
|
8
|
-
tLPAREN tRPAREN
|
7
|
+
token tTRUE tFALSE tSTRING tFLOAT tINTEGER tDATE tIDENTIFIER tAND tOR tBETWEEN
|
8
|
+
tDOT tLPAREN tRPAREN tBANG tEQ tNEQ tLEQ tGEQ tLT tGT
|
9
9
|
rule
|
10
10
|
predicate
|
11
|
-
:
|
11
|
+
: relation_predicate
|
12
12
|
| boolean_predicate
|
13
13
|
| logical_predicate
|
14
|
+
| value tBETWEEN value tAND value { Predicator::Predicates::Between.new val[0], val[2], val[4] }
|
14
15
|
| tLPAREN predicate tRPAREN
|
15
16
|
;
|
16
|
-
|
17
|
-
: value
|
17
|
+
relation_predicate
|
18
|
+
: value tEQ value { Predicator::Predicates::Equal.new val[0], val[2] }
|
19
|
+
| value tGT value { Predicator::Predicates::GreaterThan.new val[0], val[2] }
|
20
|
+
| value tLT value { Predicator::Predicates::LessThan.new val[0], val[2] }
|
21
|
+
| value tGEQ value { Predicator::Predicates::GreaterThanOrEqual.new val[0], val[2] }
|
22
|
+
| value tLEQ value { Predicator::Predicates::LessThanOrEqual.new val[0], val[2] }
|
23
|
+
| value tNEQ value { Predicator::Predicates::NotEqual.new val[0], val[2] }
|
18
24
|
;
|
19
25
|
boolean_predicate
|
20
|
-
: tTRUE
|
21
|
-
| tFALSE
|
26
|
+
: tTRUE { Predicator::Predicates::True.new }
|
27
|
+
| tFALSE { Predicator::Predicates::False.new }
|
22
28
|
;
|
23
29
|
logical_predicate
|
24
|
-
: predicate tAND predicate
|
25
|
-
| predicate tOR predicate
|
26
|
-
| tBANG predicate
|
30
|
+
: predicate tAND predicate { Predicator::Predicates::And.new [val[0], val[2]] }
|
31
|
+
| predicate tOR predicate { Predicator::Predicates::Or.new [val[0], val[2]] }
|
32
|
+
| tBANG predicate { Predicator::Predicates::Not.new val[0] }
|
27
33
|
;
|
28
34
|
value
|
29
35
|
: scalar
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Predicator
|
2
|
+
module Predicates
|
3
|
+
class Between
|
4
|
+
attr_reader :value, :left, :right
|
5
|
+
|
6
|
+
def initialize value, left, right
|
7
|
+
@value, @left, @right = value, left, right
|
8
|
+
end
|
9
|
+
|
10
|
+
def satisfied? context=Predicator::Context.new
|
11
|
+
context.value_for(value) >= context.value_for(left) &&
|
12
|
+
context.value_for(value) <= context.value_for(right)
|
13
|
+
end
|
14
|
+
|
15
|
+
def == other
|
16
|
+
other.kind_of?(self.class) &&
|
17
|
+
other.value == value &&
|
18
|
+
other.left == left &&
|
19
|
+
other.right == right
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,16 +1,12 @@
|
|
1
1
|
module Predicator
|
2
2
|
module Predicates
|
3
|
-
class
|
3
|
+
class Relation
|
4
4
|
attr_reader :left, :right
|
5
5
|
|
6
6
|
def initialize left, right
|
7
7
|
@left, @right = left, right
|
8
8
|
end
|
9
9
|
|
10
|
-
def satisfied? context=Predicator::Context.new
|
11
|
-
context.value_for(left) == context.value_for(right)
|
12
|
-
end
|
13
|
-
|
14
10
|
def == other
|
15
11
|
other.kind_of?(self.class) &&
|
16
12
|
other.left == left &&
|
data/lib/predicator/variable.rb
CHANGED
data/lib/predicator/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: predicator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JohnnyT
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -102,10 +102,17 @@ files:
|
|
102
102
|
- lib/predicator/parser.rb
|
103
103
|
- lib/predicator/parser.y
|
104
104
|
- lib/predicator/predicates/and.rb
|
105
|
-
- lib/predicator/predicates/
|
105
|
+
- lib/predicator/predicates/between.rb
|
106
|
+
- lib/predicator/predicates/equal.rb
|
106
107
|
- lib/predicator/predicates/false.rb
|
108
|
+
- lib/predicator/predicates/greater_than.rb
|
109
|
+
- lib/predicator/predicates/greater_than_or_equal.rb
|
110
|
+
- lib/predicator/predicates/less_than.rb
|
111
|
+
- lib/predicator/predicates/less_than_or_equal.rb
|
107
112
|
- lib/predicator/predicates/not.rb
|
113
|
+
- lib/predicator/predicates/not_equal.rb
|
108
114
|
- lib/predicator/predicates/or.rb
|
115
|
+
- lib/predicator/predicates/relation.rb
|
109
116
|
- lib/predicator/predicates/true.rb
|
110
117
|
- lib/predicator/variable.rb
|
111
118
|
- lib/predicator/version.rb
|