Expressions - Introduction

Using Expressions

An expression is like an algebraic expression in normal life. An expression can generally be used when any numeric or other type of value is expected. Provided the data type yielded by the expression matches the type expected there should be no problem.

For example the Circle shape expects a numeric value for the first ( radius ) parameter. So you can use a literal number, like 20, or you could use some complex expression that yields a number, e.g. "Sin(3 * x) + 45".

Components of Expressions

An expression consists of terms and operators. Each term in the expression can itself be an expression or an atomic term ( one that cannot be broken down further ).

Atomic Terms

An atomic term consists of either a literal value or a datum ( named variable or constant ). A literal value can be a compound value ( structure or array ), in which case each element of the compound can itself be an expression. so everything eventually reduces to atomic terms and operators.

Operators

There is a large set of operators. Most take numeric values as operands, but all data types have some operators.

Each operator has a fixed precedence and order in which they associate. These can be overridden using parentheses. The system is like the old "BODMAS" from school days.

The following is a summary of all the operators :-

Operator Data Types Precedence Associativity Operation
 . Structure 1000 Left Field Access
 ( Function 1000 Left Function Call
 { Structure 1000 Left Structure Modify
 [ Array/Text 1000 Left Indexing
 + Numeric 700 Right Unary Plus
 - Numeric 700 Right Unary Minus
 ^ Numeric 640 Right Power
 * Numeric 620 Left Multiplication
 / Numeric 620 Left Division
 // Numeric 620 Left Integer Division
 Mod Numeric 620 Left Modulo
 + Numeric/Text 600 Left Addition/Concatenation
 - Numeric 600 Left Subtraction
 >= <= > <  Numeric/Enum 520 Left Comparison
 == <>  All 500 Left Equality
 Not Logical 440 Right Logical Negation
 And Logical 430 Left And
 Or Logical 420 Left Inclusive Or
 XOr Logical 420 Left Exclusive Or

The absolute value of the precedence is not important, just the relative values. If the precedence values are the same then the associativity rule applies.

There are some symbols that have more the one meaning, e.g. '+' and '(', the interpretation of these depend on where they appear in the expression. A term is always followed by a binary operator ( or some terminator ) so any ambiguous symbol will always be interpreted as such in those situations.

If you have done any programming most of these operators should be familiar to you. The only one invented for this language is the "structure modify" operator ( although someone else has probably come up with the same idea already ). All the operators will be covered in detail at some point in the documentation.