< Previous PageNext Page > Hide TOC

BNF Definition of Cocoa Predicates

This article defines Cocoa predicates in Backus-Naur Form notation.

Contents:

NSPredicate
NSCompoundPredicate
NSComparisonPredicate
Operations
Aggregate Qualifier
Expression
Value Expression
Literal Value
String Value
Predicate Argument
Format Argument
Predicate Variable
Keypath Expression
Literal Aggregate
Index Expression
Aggregate Expression
Assignment Expression
Binary Expression
Binary Operator
Function Expression
Function Name
Array Expression
Dictionary Expression
Integer Expression
Numeric Value
Identifier


NSPredicate

NSPredicate ::= NSComparisonPredicate | NSCompoundPredicate
    | "(" NSPredicate ")" | TRUEPREDICATE | FALSEPREDICATE 

NSCompoundPredicate

NSCompoundPredicate ::= NSPredicate "AND" NSPredicate
    | NSPredicate "OR" NSPredicate
    | "NOT" NSPredicate

NSComparisonPredicate

NSComparisonPredicate ::= expression operation expression
    | aggregate_qualifier NSComparisonPredicate

Operations

CONTAINS and IN serve both as aggregate operators and string operators, depending on the types of their arguments.

operation ::= "=" | "!=" | "<" | ">" | "<=" | ">="
    | BETWEEN
    | aggregate_operations [ "[" string_options "]" ]
 
aggregate_operations ::= CONTAINS | IN | string_operations
 
string_operations ::= BEGINSWITH | ENDSWITH | LIKE | MATCHES
 
string_options ::= c | d | cd

Aggregate Qualifier

aggregate_qualifier ::= ANY | ALL | NONE | SOME

Expression

expression ::= "(" expression ")"
    | binary_expression
    | function_expression
    | assignment_expression
    | index_expression
    | keypath_expression
    | value_expression

Value Expression

value_expression ::= literal_value | literal_aggregate

Literal Value

literal_value ::= string_value
    | numeric_value
    | predicate_argument
    | predicate_variable
    | NULL
    | TRUE
    | FALSE
    | SELF

String Value

string_value ::= "text" | 'text'

Predicate Argument

predicate_argument ::= "%" format_argument

Format Argument

format_argument ::= "@" | "%" | "K"
    printf style conversion character

Predicate Variable

predicate_variable ::= "$" identifier

Keypath Expression

keypath_expression ::= identifier | "@" identifier
    | expression "." expression

Literal Aggregate

literal_aggregate ::= "{" [ expression [ "," expression ... ] ] "}"

Index Expression

index_expression ::= array_expression "[" integer_expression "]"
    | dictionary_expression   "[" expression "]"
    | aggregate_expression "[" FIRST "]" 
    | aggregate_expression "[" LAST "]" 
    | aggregate_expression "[" SIZE "]" 

Aggregate Expression

aggregate_expression ::= array_expression | dictionary_expression

Assignment Expression

assignment_expression ::= predicate_variable ":=" expression

Binary Expression

binary_expression ::= expression binary_operator expression
    | "-" expression

Binary Operator

binary_operator ::= "+" | "-" | "*" | "/" | "**"

Function Expression

function_expression ::= function_name "(" [ expression [ "," expression ... ] ] ")"

Function Name

function_name ::= "sum" | "count" | "min" | "max"
    | "average" | "median" | "mode" | "stddev"
    | "sqrt" | "log" | "ln" | "exp"
    | "floor" | "ceiling" | "abs" | "trunc"
    | "random" | "randomn" | "now"

Array Expression

array_expression ::= any expression that evaluates to an NSArray object

Dictionary Expression

dictionary_expression ::= any expression that evaluates to an NSDictionary object

Integer Expression

integer_expression ::= any expression that evaluates to an integral value

Numeric Value

numeric_value ::= C style numeric constant

Identifier

identifier ::= C style identifier | "#" reserved_word


< Previous PageNext Page > Hide TOC


© 2005, 2009 Apple Inc. All Rights Reserved. (Last updated: 2009-05-06)


Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.