Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/rxm.git
source/grammar/Query.g
T_INNER: '+>' ;
T_OUTER: '->' ;
-T_EOL : ',' ;
+T_COMMA: ',' ;
T_WHERE: ';' ;
/* Define the root, line map, and JOIN clauses.
*/
-start : (root | module) T_EOL ;
+start : (root | module) T_COMMA ;
root : T_ROOT T_GT element ;
module: T_MODULE T_ID ;
-statement: (pop | glob | map | include) T_EOL ;
+statement: (pop | glob | map | include) T_COMMA ;
pop : T_POP ;
glob : T_GLOB ;
include : T_IMPORT T_ID ;
-table : T_ID ;
-column : T_PERIOD T_ID ;
-tableColumn: table column ;
+table : T_ID ;
+column : T_PERIOD T_ID ;
+tableColumn : table column ;
-attribute : T_AT T_ID ;
-element : T_ID ;
-elementPath: element T_SLASH element ;
-path : element | elementPath;
+attribute : T_AT T_ID ;
+element : T_ID ;
+elementPath : element T_SLASH element ;
+path : element | elementPath;
/* Define the WHERE clause. */
where : T_WHERE expression? ;
-expression :
- tableColumn exprRelational exprValueOrSet
- | tableColumn exprEquality exprValueOrSet
- | T_EXPR_OPEN expression T_EXPR_CLOSE
- | expression (T_LOGIC_AND | T_LOGIC_OR) expression ;
+expression : exprEquality | exprLogicalAnd ;
+exprLogicalAnd: exprLogicalOr (T_LOGIC_AND exprLogicalOr)* ;
+exprLogicalOr : exprRelational (T_LOGIC_OR exprRelational)* ;
+exprRelational: exprEquality | exprCompRel ;
+exprEquality : exprParen | exprCompEqual ;
+exprParen : T_EXPR_OPEN expression T_EXPR_CLOSE ;
-exprRelational: T_LT | T_GT | T_LTE | T_GTE ;
-exprEquality : T_EQ | T_INEQ ;
+exprCompRel : tableColumn (T_LT | T_GT | T_LTE | T_GTE) exprValue ;
+exprCompEqual : tableColumn (T_EQ | T_INEQ) exprValueOrSet ;
-exprValueOrSet: exprValue | exprSet ;
exprValue : exprParameter | literal ;
-exprList : exprValue (',' exprValue)* ;
+exprValueOrSet: exprValue | exprSet ;
exprSet : T_EXPR_SET_OPEN exprList T_EXPR_SET_CLOSE ;
+exprList : exprValue (T_COMMA exprValue)* ;
exprParameter : T_EXPR_PARAMETER T_ID ;
test/where.rxm
(person.id = null) ||
(person.id <> null) ||
-(person.id = 'text') ||
+(person.id = 'text') &&
(person.id = -42.0) ||
(person.id < 42) ||

Recursive descent for WHERE clause expressions.

Author Dave Jarvis <email>
Date 2015-03-15 23:53:45 GMT-0700
Commit 7169a09bfbd5a1504d87bc1d02202ae82fb969e7
Parent f00a851
Delta 21 lines added, 20 lines removed, 1-line increase