Expression Language¶
The Expression Language is a domain-specific language (DSL) that allows for the evaluation of expressions with a syntax similar to Python. It provides a restricted subset of Python’s features to ensure safe and controlled execution.
See the inference documentation for details on how to use these at run time.
Syntax¶
The Expression Language supports the following syntax elements:
Literals¶
Numbers: Integer and floating-point numbers are supported.
Examples:
42
,3.14
Strings: String literals are enclosed in double quotes (
"
).Example:
"Hello, world!"
Booleans: Boolean values are represented by
True
andFalse
.None: The
None
value represents the absence of a value.
Arithmetic Operations¶
Addition:
+
Example:
1 + 2
Subtraction:
-
Example:
5 - 3
Multiplication:
*
Example:
2 * 4
Division:
/
Example:
10 / 2
Exponentiation:
^
or**
Example:
2^3
or2**3
Bitwise XOR:
^
Example:
5 ^ 3
Comparison Operations¶
Equal to:
==
Example:
x == y
Less than:
<
Example:
x < y
Less than or equal to:
<=
Example:
x <= y
Greater than:
>
Example:
x > y
Greater than or equal to:
>=
Example:
x >= y
Logical Operations¶
Logical AND:
and
Example:
x and y
Logical OR:
or
Example:
x or y
Logical NOT:
not
Example:
not x
Variables¶
Variables can be referenced by their names. They are resolved from the context in which the expression is evaluated.
Example:
x + y
If a variable is not defined or has a value of None
, it will be treated as None
in the expression.
Functions¶
The Expression Language provides a set of built-in functions:
max(arg1, arg2, ...)
: Returns the maximum value among the arguments.min(arg1, arg2, ...)
: Returns the minimum value among the arguments.len(arg)
: Returns the length of a string or a list.str(arg)
: Converts the argument to a string.case(cond1, val1, cond2, val2, ..., default)
: Evaluates the conditions in order and returns the value associated with the first true condition. If no condition is true, the default value is returned.
Attribute Access¶
Attributes of objects can be accessed using dot notation (object.attribute
). Attribute access can be chained to navigate through nested objects.
Example:
person.name
,person.address.street
When an attribute is accessed on a list, the operation is distributed over the elements of the list.
Example:
persons.name
(returns a list of names)
Conditional Expressions¶
Conditional expressions allow for the evaluation of different expressions based on a condition.
Syntax:
<expression_if_true> if <condition> else <expression_if_false>
Example:
"Positive" if x > 0 else "Non-positive"
Operator Precedence¶
The Expression Language follows the same operator precedence rules as Python. Parentheses can be used to override the default precedence order.
Limitations¶
The Expression Language has the following limitations:
It does not support control flow statements such as loops or function definitions.
It does not allow the use of certain potentially unsafe operations, such as
__import__
.It is designed for simple expressions and does not provide the full range of features available in Python.
Examples¶
Here are a few examples of expressions in the Expression Language:
1 + 2 * 3
: Evaluates to7
."Hello, " + "world!"
: Evaluates to"Hello, world!"
.x > 10 and y < 5
: Evaluates toTrue
ifx
is greater than10
andy
is less than5
, otherwiseFalse
.max(x, y, z)
: Returns the maximum value amongx
,y
, andz
.person.name
: Returns the value of thename
attribute of theperson
object."Positive" if x > 0 else "Non-positive"
: Returns"Positive"
ifx
is greater than0
, otherwise returns"Non-positive"
.
This documentation provides an overview of the Expression Language and its supported features. It is independent of any specific implementation or programming language.