Expressions
An expression has a lot of variants like binary or unary expressions, calls or just be an Atom
Atom
An Atom is the smallest possible expression, just being one value or a Path.
Values
All of the tokens that are atomic like null, int, float, etc. are valid Atoms.
Examples: 1, null, true, "hello there"
Sub-Expression
Of course an Atom can also be another Expression
Examples: (a + b), ((a + b) * c), (1)
Vector
A list of Expressions
Examples: [1, 2, 3], [a + b, "joe", false]
Object
A list of identifier and Expression pairs
Examples: { name = "joe", age = 25 }
If-Expression
A conditional expression branch with required if and else-cases.
Examples: if age > 18 "of age" else "under age"
Function Definition
This is used to define functions with parameters as an expression.
Examples: fn (a, b) { return a + b }
Path
A path is either an identifier or a field/index into another path
Examples: a, a.b, a.b.c, a[1]