From 1afaad45cc14afff4e82eb3bd9f5bee477551ec8 Mon Sep 17 00:00:00 2001 From: JohnnyT Date: Sun, 7 Sep 2025 17:25:56 -0600 Subject: [PATCH] Updates EBNF grammar in docs --- CLAUDE.md | 8 +++++--- README.md | 6 ++++-- lib/predicator/parser.ex | 6 ++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index e2eae1a..bb7b051 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -21,17 +21,19 @@ expression → logical_or logical_or → logical_and ( ("OR" | "or") logical_and )* logical_and → logical_not ( ("AND" | "and") logical_not )* logical_not → ("NOT" | "not") logical_not | comparison -comparison → addition ( ( ">" | "<" | ">=" | "<=" | "=" | "==" | "!=" | "in" | "contains" ) addition )? +comparison → addition ( ( ">" | "<" | ">=" | "<=" | "=" | "==" | "!=" | "===" | "!==" | "in" | "contains" ) addition )? addition → multiplication ( ( "+" | "-" ) multiplication )* multiplication → unary ( ( "*" | "/" | "%" ) unary )* unary → ( "-" | "!" ) unary | postfix postfix → primary ( "[" expression "]" | "." IDENTIFIER )* -primary → NUMBER | FLOAT | STRING | BOOLEAN | DATE | DATETIME | IDENTIFIER | list | object | function_call | "(" expression ")" -function_call → IDENTIFIER "(" ( expression ( "," expression )* )? ")" +primary → NUMBER | FLOAT | STRING | BOOLEAN | DATE | DATETIME | IDENTIFIER | duration | relative_date | list | object | function_call | "(" expression ")" +function_call → FUNCTION_NAME "(" ( expression ( "," expression )* )? ")" list → "[" ( expression ( "," expression )* )? "]" object → "{" ( object_entry ( "," object_entry )* )? "}" object_entry → object_key ":" expression object_key → IDENTIFIER | STRING +duration → NUMBER UNIT+ +relative_date → duration "ago" | duration "from" "now" | "next" duration | "last" duration ``` ### Core Components diff --git a/README.md b/README.md index 4f5f2b2..570a8a7 100644 --- a/README.md +++ b/README.md @@ -355,17 +355,19 @@ expression → logical_or logical_or → logical_and ( ("OR" | "or") logical_and )* logical_and → logical_not ( ("AND" | "and") logical_not )* logical_not → ("NOT" | "not") logical_not | comparison -comparison → addition ( ( ">" | "<" | ">=" | "<=" | "=" | "==" | "!=" | "in" | "contains" ) addition )? +comparison → addition ( ( ">" | "<" | ">=" | "<=" | "=" | "==" | "!=" | "===" | "!==" | "in" | "contains" ) addition )? addition → multiplication ( ( "+" | "-" ) multiplication )* multiplication → unary ( ( "*" | "/" | "%" ) unary )* unary → ( "-" | "!" ) unary | postfix postfix → primary ( "[" expression "]" | "." IDENTIFIER )* -primary → NUMBER | FLOAT | STRING | BOOLEAN | DATE | DATETIME | IDENTIFIER | function_call | list | object | "(" expression ")" +primary → NUMBER | FLOAT | STRING | BOOLEAN | DATE | DATETIME | IDENTIFIER | duration | relative_date | function_call | list | object | "(" expression ")" function_call → FUNCTION_NAME "(" ( expression ( "," expression )* )? ")" list → "[" ( expression ( "," expression )* )? "]" object → "{" ( object_entry ( "," object_entry )* )? "}" object_entry → object_key ":" expression object_key → IDENTIFIER | STRING +duration → NUMBER UNIT+ +relative_date → duration "ago" | duration "from" "now" | "next" duration | "last" duration ``` ### Core Components diff --git a/lib/predicator/parser.ex b/lib/predicator/parser.ex index 763b6bb..b0a3612 100644 --- a/lib/predicator/parser.ex +++ b/lib/predicator/parser.ex @@ -17,17 +17,19 @@ defmodule Predicator.Parser do logical_or → logical_and ( "OR" | "||" logical_and )* logical_and → logical_not ( "AND" | "&&" logical_not )* logical_not → "NOT" | "!" logical_not | comparison - comparison → addition ( ( ">" | "<" | ">=" | "<=" | "=" | "==" | "!=" | "in" | "contains" ) addition )? + comparison → addition ( ( ">" | "<" | ">=" | "<=" | "=" | "==" | "!=" | "===" | "!==" | "in" | "contains" ) addition )? addition → multiplication ( ( "+" | "-" ) multiplication )* multiplication → unary ( ( "*" | "/" | "%" ) unary )* unary → ( "-" | "!" ) unary | postfix postfix → primary ( "[" expression "]" | "." IDENTIFIER )* - primary → NUMBER | FLOAT | STRING | BOOLEAN | DATE | DATETIME | IDENTIFIER | function_call | list | object | "(" expression ")" + primary → NUMBER | FLOAT | STRING | BOOLEAN | DATE | DATETIME | IDENTIFIER | duration | relative_date | function_call | list | object | "(" expression ")" function_call → FUNCTION_NAME "(" ( expression ( "," expression )* )? ")" list → "[" ( expression ( "," expression )* )? "]" object → "{" ( object_entry ( "," object_entry )* )? "}" object_entry → object_key ":" expression object_key → IDENTIFIER | STRING + duration → NUMBER UNIT+ + relative_date → duration "ago" | duration "from" "now" | "next" duration | "last" duration ## Examples