--- a/libidav/davqlparser.h Sat May 02 11:00:28 2015 +0200 +++ b/libidav/davqlparser.h Sat May 02 18:32:50 2015 +0200 @@ -141,10 +141,18 @@ * The grammar for a DavQLStatement is: * * <pre> - * Expression = Expression, BinaryOperator, Expression - * | UnaryOperator, Expression - * | FunctionCall | Identifier | Literal - * | "(", Expression, ")"; + * Expression = AddExpression; + * AddExpression = MultExpression, [AddOperator, AddExpression]; + * MultExpression = BitwiseExpression, [MultOperator, MultExpression]; + * BitwiseExpression = UnaryExpression, [BitwiseOperator, BitwiseExpression]; + * UnaryExpression = [UnaryOperator], (AtomicExpression | ParExpression); + * AtomicExpression = FunctionCall | Identifier | Literal; + * ParExpression = "(", Expression, ")"; + * + * BitwiseOperator = "&" | "|" | "^"; + * MultOperator = "*" | "/"; + * AddOperator = "+" | "-"; + * UnaryOperator = "+" | "-" | "~"; * * FunctionCall = Identifier, "(", ArgumentList, ")"; * ArgumentList = Expression, {",", Expression}; @@ -156,14 +164,13 @@ * String = "'", {?Character? - "'" | "'''"} , "'" | "%s"; * Timestamp = "%t"; // TODO: maybe introduce a real literal * - * LogicalExpression = LogicalExpression, LogicalOperator, LogicalExpression - * | "not ", LogicalExpression - * | Expression, Comparison, Expression + * LogicalExpression = "not ", LogicalExpression + * | "(", LogicalExpression, ")" + * | BooleanExpression, [LogicalOperator, LogicalExpression]; + * BooleanExpression = Expression, Comparison, Expression * | Expression, (" like " | " unlike "), String - * | "(", LogicalExpression, ")"; + * | FunctionCall | Identifier; * - * UnaryOperator = "-" | "~"; - * BinaryOperator = "+" | "-" | "*" | "/" | "&" | "|" | "^"; * LogicalOperator = " and " | " or " | " xor "; * Comparison = | "=" | "<" | ">" | "<=" | ">=" | "!="; * @@ -172,7 +179,7 @@ * | "-"; * FieldExpression = Identifier * | Expression, " as ", Identifier; - * SetExpressions = SetExpression, {",", SetExpressions}; + * SetExpressions = SetExpression, {",", SetExpression}; * SetExpression = Identifier, "=", Expression; * * Path = "%s"