In addition to arrays, we need at least two built-in domains:
Integer and String.
Boolean can be skipped at a first stage.
Indeed, we have booleans expressions and we can encode boolean values
by integers.
Integer.
The built-in domain Integer needs to support the arithmetic
operations appearing in
ArithmeticExpression plus the print function with signature
print: (Integer) -> ()
String.
The built-in domain String needs to support creation
(like in s: String := "Allcot")
element access (like in
AttributeCall)
plus a concat and a print function with signatures