304 lines
5.8 KiB
Plaintext
304 lines
5.8 KiB
Plaintext
Grammar
|
|
|
|
0 $accept: filter_expr $end
|
|
|
|
1 filter_expr: filter_expr T_OR filter_expr
|
|
2 | filter_expr T_AND filter_expr
|
|
3 | '(' filter_expr ')'
|
|
4 | filter
|
|
|
|
5 filter: number_filter
|
|
6 | string_filter
|
|
|
|
7 number_filter: T_FIELD '=' T_NUMBER
|
|
8 | T_FIELD '>' T_NUMBER
|
|
9 | T_FIELD '<' T_NUMBER
|
|
10 | T_FIELD T_NOT_EQ T_NUMBER
|
|
11 | T_FIELD T_GT_EQ T_NUMBER
|
|
12 | T_FIELD T_LT_EQ T_NUMBER
|
|
|
|
13 string_filter: T_FIELD '=' T_FIELD
|
|
14 | T_FIELD T_NOT_EQ T_FIELD
|
|
|
|
|
|
Terminals, with rules where they appear
|
|
|
|
$end (0) 0
|
|
'(' (40) 3
|
|
')' (41) 3
|
|
'<' (60) 9
|
|
'=' (61) 7 13
|
|
'>' (62) 8
|
|
error (256)
|
|
T_AND (258) 2
|
|
T_OR (259) 1
|
|
T_NUMBER (260) 7 8 9 10 11 12
|
|
T_FIELD (261) 7 8 9 10 11 12 13 14
|
|
T_NOT_EQ (262) 10 14
|
|
T_GT_EQ (263) 11
|
|
T_LT_EQ (264) 12
|
|
|
|
|
|
Nonterminals, with rules where they appear
|
|
|
|
$accept (15)
|
|
on left: 0
|
|
filter_expr (16)
|
|
on left: 1 2 3 4, on right: 0 1 2 3
|
|
filter (17)
|
|
on left: 5 6, on right: 4
|
|
number_filter (18)
|
|
on left: 7 8 9 10 11 12, on right: 5
|
|
string_filter (19)
|
|
on left: 13 14, on right: 6
|
|
|
|
|
|
state 0
|
|
|
|
0 $accept: . filter_expr $end
|
|
|
|
'(' shift, and go to state 1
|
|
T_FIELD shift, and go to state 2
|
|
|
|
filter_expr go to state 3
|
|
filter go to state 4
|
|
number_filter go to state 5
|
|
string_filter go to state 6
|
|
|
|
|
|
state 1
|
|
|
|
3 filter_expr: '(' . filter_expr ')'
|
|
|
|
'(' shift, and go to state 1
|
|
T_FIELD shift, and go to state 2
|
|
|
|
filter_expr go to state 7
|
|
filter go to state 4
|
|
number_filter go to state 5
|
|
string_filter go to state 6
|
|
|
|
|
|
state 2
|
|
|
|
7 number_filter: T_FIELD . '=' T_NUMBER
|
|
8 | T_FIELD . '>' T_NUMBER
|
|
9 | T_FIELD . '<' T_NUMBER
|
|
10 | T_FIELD . T_NOT_EQ T_NUMBER
|
|
11 | T_FIELD . T_GT_EQ T_NUMBER
|
|
12 | T_FIELD . T_LT_EQ T_NUMBER
|
|
13 string_filter: T_FIELD . '=' T_FIELD
|
|
14 | T_FIELD . T_NOT_EQ T_FIELD
|
|
|
|
T_NOT_EQ shift, and go to state 8
|
|
'>' shift, and go to state 9
|
|
T_GT_EQ shift, and go to state 10
|
|
'<' shift, and go to state 11
|
|
'=' shift, and go to state 12
|
|
T_LT_EQ shift, and go to state 13
|
|
|
|
|
|
state 3
|
|
|
|
0 $accept: filter_expr . $end
|
|
1 filter_expr: filter_expr . T_OR filter_expr
|
|
2 | filter_expr . T_AND filter_expr
|
|
|
|
$end shift, and go to state 14
|
|
T_AND shift, and go to state 15
|
|
T_OR shift, and go to state 16
|
|
|
|
|
|
state 4
|
|
|
|
4 filter_expr: filter .
|
|
|
|
$default reduce using rule 4 (filter_expr)
|
|
|
|
|
|
state 5
|
|
|
|
5 filter: number_filter .
|
|
|
|
$default reduce using rule 5 (filter)
|
|
|
|
|
|
state 6
|
|
|
|
6 filter: string_filter .
|
|
|
|
$default reduce using rule 6 (filter)
|
|
|
|
|
|
state 7
|
|
|
|
1 filter_expr: filter_expr . T_OR filter_expr
|
|
2 | filter_expr . T_AND filter_expr
|
|
3 | '(' filter_expr . ')'
|
|
|
|
')' shift, and go to state 17
|
|
T_AND shift, and go to state 15
|
|
T_OR shift, and go to state 16
|
|
|
|
|
|
state 8
|
|
|
|
10 number_filter: T_FIELD T_NOT_EQ . T_NUMBER
|
|
14 string_filter: T_FIELD T_NOT_EQ . T_FIELD
|
|
|
|
T_NUMBER shift, and go to state 18
|
|
T_FIELD shift, and go to state 19
|
|
|
|
|
|
state 9
|
|
|
|
8 number_filter: T_FIELD '>' . T_NUMBER
|
|
|
|
T_NUMBER shift, and go to state 20
|
|
|
|
|
|
state 10
|
|
|
|
11 number_filter: T_FIELD T_GT_EQ . T_NUMBER
|
|
|
|
T_NUMBER shift, and go to state 21
|
|
|
|
|
|
state 11
|
|
|
|
9 number_filter: T_FIELD '<' . T_NUMBER
|
|
|
|
T_NUMBER shift, and go to state 22
|
|
|
|
|
|
state 12
|
|
|
|
7 number_filter: T_FIELD '=' . T_NUMBER
|
|
13 string_filter: T_FIELD '=' . T_FIELD
|
|
|
|
T_NUMBER shift, and go to state 23
|
|
T_FIELD shift, and go to state 24
|
|
|
|
|
|
state 13
|
|
|
|
12 number_filter: T_FIELD T_LT_EQ . T_NUMBER
|
|
|
|
T_NUMBER shift, and go to state 25
|
|
|
|
|
|
state 14
|
|
|
|
0 $accept: filter_expr $end .
|
|
|
|
$default accept
|
|
|
|
|
|
state 15
|
|
|
|
2 filter_expr: filter_expr T_AND . filter_expr
|
|
|
|
'(' shift, and go to state 1
|
|
T_FIELD shift, and go to state 2
|
|
|
|
filter_expr go to state 26
|
|
filter go to state 4
|
|
number_filter go to state 5
|
|
string_filter go to state 6
|
|
|
|
|
|
state 16
|
|
|
|
1 filter_expr: filter_expr T_OR . filter_expr
|
|
|
|
'(' shift, and go to state 1
|
|
T_FIELD shift, and go to state 2
|
|
|
|
filter_expr go to state 27
|
|
filter go to state 4
|
|
number_filter go to state 5
|
|
string_filter go to state 6
|
|
|
|
|
|
state 17
|
|
|
|
3 filter_expr: '(' filter_expr ')' .
|
|
|
|
$default reduce using rule 3 (filter_expr)
|
|
|
|
|
|
state 18
|
|
|
|
10 number_filter: T_FIELD T_NOT_EQ T_NUMBER .
|
|
|
|
$default reduce using rule 10 (number_filter)
|
|
|
|
|
|
state 19
|
|
|
|
14 string_filter: T_FIELD T_NOT_EQ T_FIELD .
|
|
|
|
$default reduce using rule 14 (string_filter)
|
|
|
|
|
|
state 20
|
|
|
|
8 number_filter: T_FIELD '>' T_NUMBER .
|
|
|
|
$default reduce using rule 8 (number_filter)
|
|
|
|
|
|
state 21
|
|
|
|
11 number_filter: T_FIELD T_GT_EQ T_NUMBER .
|
|
|
|
$default reduce using rule 11 (number_filter)
|
|
|
|
|
|
state 22
|
|
|
|
9 number_filter: T_FIELD '<' T_NUMBER .
|
|
|
|
$default reduce using rule 9 (number_filter)
|
|
|
|
|
|
state 23
|
|
|
|
7 number_filter: T_FIELD '=' T_NUMBER .
|
|
|
|
$default reduce using rule 7 (number_filter)
|
|
|
|
|
|
state 24
|
|
|
|
13 string_filter: T_FIELD '=' T_FIELD .
|
|
|
|
$default reduce using rule 13 (string_filter)
|
|
|
|
|
|
state 25
|
|
|
|
12 number_filter: T_FIELD T_LT_EQ T_NUMBER .
|
|
|
|
$default reduce using rule 12 (number_filter)
|
|
|
|
|
|
state 26
|
|
|
|
1 filter_expr: filter_expr . T_OR filter_expr
|
|
2 | filter_expr . T_AND filter_expr
|
|
2 | filter_expr T_AND filter_expr .
|
|
|
|
$default reduce using rule 2 (filter_expr)
|
|
|
|
|
|
state 27
|
|
|
|
1 filter_expr: filter_expr . T_OR filter_expr
|
|
1 | filter_expr T_OR filter_expr .
|
|
2 | filter_expr . T_AND filter_expr
|
|
|
|
T_AND shift, and go to state 15
|
|
|
|
$default reduce using rule 1 (filter_expr)
|