| | +/* Relational eXpression Map |
| | + */ |
| | +grammar Query ; |
| | + |
| | +query: root line where? EOF ; |
| | + |
| | +/* Define the root, line map, and JOIN clauses. |
| | + */ |
| | +root: (TOKEN_ROOT TOKEN_MAP element) | module ; |
| | +line: statement* ; |
| | + |
| | +statement: (TOKEN_POP | TOKEN_GLOB | map | iJoin | oJoin | include) ',' ; |
| | +map : entity TOKEN_MAP node ; |
| | +iJoin : tableColumn TOKEN_INNER tableColumn ; |
| | +oJoin : tableColumn TOKEN_OUTER tableColumn ; |
| | +include : TOKEN_IMPORT TOKEN_ID ; |
| | +module : TOKEN_MODULE TOKEN_ID ; |
| | + |
| | +table : TOKEN_ID ; |
| | +column : '.' TOKEN_ID ; |
| | +tableColumn: table column ; |
| | + |
| | +attribute : '@' TOKEN_ID ; |
| | +element : TOKEN_ID ; |
| | +path : element '/' element ; |
| | +entity : table | column ; |
| | +node : element | attribute ; |
| | + |
| | +/* Define the WHERE clause. |
| | + */ |
| | +where : TOKEN_ID ; |
| | + |
| | +/* Define the tokens. |
| | + */ |
| | +TOKEN_ID : [A-Za-z0-9_]+ ; |
| | +TOKEN_EOL : [\r\n]+ -> skip; |
| | +TOKEN_WS : [ \t\r\n]+ -> skip ; |
| | +TOKEN_POP : '^' ; |
| | +TOKEN_GLOB : '.*' ; |
| | +TOKEN_ROOT : 'root' ; |
| | +TOKEN_MAP : '>' ; |
| | +TOKEN_INNER : '+>' ; |
| | +TOKEN_OUTER : '->' ; |
| | +TOKEN_IMPORT: 'import' ; |
| | +TOKEN_MODULE: 'module' ; |
| | + |
| | |