mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-03-10 00:20:54 +08:00
Setup operator precedence for parser to avoid ambiguity and fix shift/reduce warnings
This commit is contained in:
@@ -65,8 +65,11 @@ or { return OR; }
|
|||||||
not { return NOT; }
|
not { return NOT; }
|
||||||
is { return IS; }
|
is { return IS; }
|
||||||
null { return NUL; }
|
null { return NUL; }
|
||||||
|
"=" { return EQ; }
|
||||||
(<=) { return LTEQ; }
|
(<=) { return LTEQ; }
|
||||||
(>=) { return GTEQ; }
|
(>=) { return GTEQ; }
|
||||||
|
"<" { return LT; }
|
||||||
|
">" { return GT; }
|
||||||
like { return LIKE; }
|
like { return LIKE; }
|
||||||
limit { return LIMIT; }
|
limit { return LIMIT; }
|
||||||
count { return COUNT; }
|
count { return COUNT; }
|
||||||
|
|||||||
@@ -71,6 +71,18 @@ typedef struct sql_context
|
|||||||
%type <ival> nulloperator
|
%type <ival> nulloperator
|
||||||
%type <name> identifier
|
%type <name> identifier
|
||||||
|
|
||||||
|
//
|
||||||
|
// operator precedence
|
||||||
|
//
|
||||||
|
|
||||||
|
// left associativity means that 1+2+3 translates to (1+2)+3
|
||||||
|
// the order of operators here determines their precedence
|
||||||
|
|
||||||
|
%left OR
|
||||||
|
%left AND
|
||||||
|
%right NOT
|
||||||
|
%left EQ LTEQ GTEQ LT GT LIKE IS
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
stmt:
|
stmt:
|
||||||
@@ -142,9 +154,9 @@ identifier:
|
|||||||
;
|
;
|
||||||
|
|
||||||
operator:
|
operator:
|
||||||
'=' { $$ = MDB_EQUAL; }
|
EQ { $$ = MDB_EQUAL; }
|
||||||
| '>' { $$ = MDB_GT; }
|
| GT { $$ = MDB_GT; }
|
||||||
| '<' { $$ = MDB_LT; }
|
| LT { $$ = MDB_LT; }
|
||||||
| LTEQ { $$ = MDB_LTEQ; }
|
| LTEQ { $$ = MDB_LTEQ; }
|
||||||
| GTEQ { $$ = MDB_GTEQ; }
|
| GTEQ { $$ = MDB_GTEQ; }
|
||||||
| LIKE { $$ = MDB_LIKE; }
|
| LIKE { $$ = MDB_LIKE; }
|
||||||
|
|||||||
Reference in New Issue
Block a user