Operators
Expressions in baba-lang are composed of operators. There are 32 operators in baba-lang, that can be categorized to 6 types:
- Binary operators
- Logical operators
- Unary operators
- Assignment operators
- Special operators
Play with operators
- Make sure baba-lang is in your local machine. See How to install and use baba-lang to obtain and run baba-lang in your local machine.
- Run baba-lang without arguments to go to interactive mode.
-
Try to enter a mathematical expression in baba-lang:
baba-lang 0.4.2 > 1 + 2 * 3 - 4 3 > 1 + 1 * 1 / 1 - 1 1.0
- baba-lang would evaluate the expression according to the rules you have learned at school (PEMDAS), like a glorified calculator. Experiment with other operators as well.
- Once you are done, type
Ctrl-Z
(Windows) orCtrl-D
(Linux) to exit the interpreter.
Binary operators
Binary operators take two values. Binary arithmetic operators in baba-lang are almost always infix, meaning they are placed between their arguments. They follow precedence rules, such as the aforementioned PEMDAS, among others, and are either left- or right-associative. Comparison operators, however, are non-associative, which means multiple comparison operators without parentheses (e.g. a == b == c
) will cause a syntax error.
Name | Symbol | Notes |
---|---|---|
Addition | + |
Adds numbers, concatenates strings and lists |
Subtraction | - |
|
Multiplication | * |
Multiplies numbers, repeats strings |
Division | / |
Always return floats |
Floor division | %/% |
|
Modulo | % |
Satisfies a % b == a - b * (a %/% b) |
Power | ** |
|
Bitwise and | & |
|
Bitwise or | | |
|
Bitwise xor | ^ |
|
Left shift | << |
|
Right shift | >> |
|
Equality | == |
|
Inequality | != |
|
Greater than | > |
|
Greater than or equal to | >= |
|
Less than | < |
|
Less than or equal to | <= |
Logical operators
Unlike normal operators, logical operators are short-circuit, meaning they may not evaluate the second argument if the result is obvious from the first argument. This can be used to implement conditionals in an expression (a && b || c
). Only &&
(logical and) and ||
(logical or) have this property. !
(logical not) behave like a normal unary operator.
Name | Symbol | Notes |
---|---|---|
Logical and | && |
|
Logical or | || |
|
Logical not | ! |
Unary operators
Unary operators take one argument only. In baba-lang, they are prefix operators, meaning they precede their only argument.
Name | Symbol | Notes |
---|---|---|
Unary plus | + |
|
Negation | - |
|
Bitwise not | ~ |
Assignment operators
Assignment operations consists of an assignment target on the left-hand side, which is currently either:
- an identifier (variable)
- a subscript , the operator itself and the rest at the right hand side.
Name | Symbol | Notes |
---|---|---|
Assignment | = |
If assigning variables, always creates new ones |
In-place assignment | += -= *= /= %= %/%= |
Special operators
These operators have special syntax and they are detailed in other sections of the reference.
Name | Notes |
---|---|
Function call | Syntax: f(a, b, ...) |
Subscript | Syntax: a[i] |
Dot access | Syntax: a.b |
Operator precedence table
All operators in baba-lang have a precedence, which allows ambiguity to be solved. The precedence table of operators are shown here, with 0 being the lowest precedence.
Precedence | Associativity | Operators |
---|---|---|
0 | Right | = , += , -= , *= , /= , %= , %/%= |
1 | Right | || |
2 | Right | && |
3 | None | == , != , > , >= , < , <= |
4 | Left | | , ^ |
5 | Left | & |
6 | Left | << , >> |
7 | Left | + , - |
8 | Left | * , / , % , %/% |
9 | unary + , unary - |
|
10* | Right* | ** |
11 | call a() , subscript a[i] , dot a.b |
|
12 | parentheses (...) |
* Power operator’s associativity and precedence is special since it has lower precedence than unary operators on the right, but higher precedence than them on the left. Put simply, 3 ** -2
is possible and -3 ** 2
means -(3 ** 2)
rather than (-3) ** 2
.