mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
40 lines
1.6 KiB
Plaintext
40 lines
1.6 KiB
Plaintext
|
|
grammar TraceOperatorGrammar;
|
||
|
|
|
||
|
|
// Entry point of the grammar (the root of the parse tree)
|
||
|
|
query : expression+ EOF;
|
||
|
|
|
||
|
|
// Expression rules
|
||
|
|
expression
|
||
|
|
: 'NOT' expression // NOT prefix expression
|
||
|
|
| '(' expression ')' operator expression // Parenthesized operator expression
|
||
|
|
| '(' expression ')' // Parenthesized expression
|
||
|
|
| left=atom operator right=expression // Binary operator with expression on right
|
||
|
|
| left=atom operator '(' expr=expression ')' // Expression with parentheses inside
|
||
|
|
| atom // Simple expression (atom)
|
||
|
|
;
|
||
|
|
|
||
|
|
// Atom definition: atoms are identifiers (letters and optional numbers)
|
||
|
|
atom
|
||
|
|
: IDENTIFIER // General atom (combination of letters and numbers)
|
||
|
|
;
|
||
|
|
|
||
|
|
// Operator definition
|
||
|
|
operator
|
||
|
|
: '=>' // Implication
|
||
|
|
| '&&' // AND
|
||
|
|
| '||' // OR
|
||
|
|
| 'NOT' // NOT
|
||
|
|
| '->' // Implication
|
||
|
|
;
|
||
|
|
|
||
|
|
// Lexer rules
|
||
|
|
|
||
|
|
// IDENTIFIER can be a sequence of letters followed by optional numbers
|
||
|
|
IDENTIFIER
|
||
|
|
: [a-zA-Z]+[0-9]* // Letters followed by optional numbers (e.g., A1, B123, C99)
|
||
|
|
;
|
||
|
|
|
||
|
|
// Whitespace (to be skipped)
|
||
|
|
WS
|
||
|
|
: [ \t\r\n]+ -> skip; // Skip whitespace
|