mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 07:12:46 +01:00
110 lines
3.2 KiB
ANTLR
110 lines
3.2 KiB
ANTLR
/*
|
|
* The MIT License (MIT)
|
|
*
|
|
* Copyright (c) 2014 by Bart Kiers
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
* associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
|
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all copies or
|
|
* substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
|
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser
|
|
* Developed by:
|
|
* Bart Kiers, bart@big-o.nl
|
|
* Martin Mirchev, marti_2203@abv.bg
|
|
* Mike Lische, mike@lischke-online.de
|
|
*/
|
|
|
|
// $antlr-format alignTrailingComments on, columnLimit 130, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments off
|
|
// $antlr-format useTab off, allowShortRulesOnASingleLine off, allowShortBlocksOnASingleLine on, alignSemicolons ownLine
|
|
|
|
parser grammar CAQLParser;
|
|
|
|
options {
|
|
tokenVocab = CAQLLexer;
|
|
}
|
|
|
|
parse: expression EOF
|
|
;
|
|
|
|
expression:
|
|
value_literal
|
|
| reference
|
|
| operator_unary
|
|
| expression (T_PLUS|T_MINUS) expression
|
|
| expression (T_TIMES|T_DIV|T_MOD) expression
|
|
| expression T_RANGE expression
|
|
| expression (T_LT|T_GT|T_LE|T_GE) expression
|
|
| expression T_NOT? T_IN expression
|
|
| expression (T_EQ|T_NE) expression
|
|
| expression (T_ALL|T_ANY|T_NONE) eq_op=(T_EQ|T_NE|T_LT|T_GT|T_LE|T_GE|T_IN) expression
|
|
| expression (T_ALL|T_ANY|T_NONE) T_NOT T_IN expression
|
|
| expression T_NOT? (T_LIKE|T_REGEX_MATCH|T_REGEX_NON_MATCH) expression
|
|
| expression T_AND expression
|
|
| expression T_OR expression
|
|
| expression T_QUESTION expression T_COLON expression
|
|
| expression T_QUESTION T_COLON expression
|
|
;
|
|
|
|
operator_unary: (
|
|
T_PLUS expression
|
|
| T_MINUS expression
|
|
| T_NOT expression
|
|
);
|
|
|
|
reference:
|
|
T_STRING
|
|
| compound_value
|
|
| function_call
|
|
| T_OPEN expression T_CLOSE
|
|
| reference DOT T_STRING
|
|
| reference T_ARRAY_OPEN expression T_ARRAY_CLOSE
|
|
;
|
|
|
|
compound_value: (
|
|
array
|
|
| object
|
|
);
|
|
|
|
function_call: (
|
|
T_STRING T_OPEN expression? (T_COMMA expression)*? T_COMMA? T_CLOSE
|
|
);
|
|
|
|
value_literal: (
|
|
T_QUOTED_STRING
|
|
| T_INT
|
|
| T_FLOAT
|
|
| T_NULL
|
|
| T_TRUE
|
|
| T_FALSE
|
|
);
|
|
|
|
array:(
|
|
T_ARRAY_OPEN expression? (T_COMMA expression)*? T_COMMA? T_ARRAY_CLOSE
|
|
);
|
|
|
|
object:
|
|
T_OBJECT_OPEN object_element? (T_COMMA object_element)* T_COMMA? T_OBJECT_CLOSE
|
|
;
|
|
|
|
object_element:(
|
|
T_STRING
|
|
| object_element_name T_COLON expression
|
|
| T_ARRAY_OPEN expression T_ARRAY_CLOSE T_COLON expression
|
|
);
|
|
|
|
object_element_name:(
|
|
T_STRING
|
|
| T_QUOTED_STRING
|
|
);
|