An OPM Query Language expression may be either a variable, a primitive value or a finite set of primitive values.
<expression> ::= <variable>
| <primitive value>
| <set of values>
;
<primitive value> ::= <number>
| <string>
;
<set of values> ::= '{' <set of numbers> '}'
| '{' <set of strings> '}'
;
<set of numbers> ::= <number>
| <set of numbers> ',' <number>
;
<set of strings> ::= <string>
| <set of strings> ',' <string>
;
Given an instantiation of variables, we may extend it to assign values to expressions: a variable expression is assigned the same value as associated with the variable by the instantiation, while values are assigned to primitive expressions (numbers and strings) in the standard way.