Cicada ---> Online Help Docs ---> Cicada scripting

Expressions

At its most basic level, a Cicada script consists of commands which are usually written on separate lines:


    a := 2*7 + 9
    print(a)
   

although they may also be separated using commas:


    a := 2*7 + 9, print(a)
   

Unlike in C, we don’t need a semicolon at the end of each command -- the line break automatically does that for us. If we don’t want the line break to mark the end of the command, then we usually need to use the line-continuation symbol ‘&’:


    a := 2* &
       7 + 9
   

This even works from the command prompt (just make sure that the & is the very last character on the line -- no trailing spaces). A & can appear between any two operators in a command, but not within an operator, name, symbol or string.

Each command consists of variables and constants glued together by operators. For example, the command a := 2*7 + 9 contains the variable a, three integer constants 2, 7, and 9, and three other operators: +, *, and the define-equate operator :=. The operators are grouped in the following way:


    a := ( (2*7) + 9 )
   

That is to say, the multiplication has the highest precedence (i.e. it is done first), followed by the addition, and lastly by the define-equate operation which sets a to the final value. If we want to change the default grouping of operators, we use parentheses just as in C: for example a := 2*(7 + 9) would do the addition first.

Table 2 gives the precedence levels of all Cicada operators. The final column determines how operators of the same precedence level are grouped. For example, the division operator falls within precedence level 11 which has left-to-right grouping, meaning that 8 / 4 / 2 is equivalent to (8 / 4) / 2. On the other hand, the define and equate operators all have right-to-left grouping, so a := b = c = 2 is equivalent to a := (b = (c = 2)).


precedence commands symbols grouping
1 command breaks \n , ; right to left
2 commands return remove N/A
    if for while loop  
3 define/equate :: ::@ := :=@ @:: *::  
    = <- =@ right to left
  forced equate =! <-!  
4 logical and, or, xor and or xor left to right
5 logical not not right to left
6 comparisons == /= > >= < <= N/A
7 substitute code << left to right
8 array type [] right to left
9 inheritance : left to right
10 add, subtract + - left to right
11 multiply, divide, mod * / mod left to right
12 negate - right to left
13 raise to power ^ left to right
14 function calls ()  
  step to member . left to right
  step to index/indices [] [<>] [+] [-] [^]  
  code number #  
15 backstep \ parent left to right

Table 2: Order of operations

All of the information in Table 2 comes from the cclang.c source file. That means that anyone can change the Cicada language by just editing that file (see Section 4).


Prev: Basic Cicada syntax    Next: Variables


Last update: November 12, 2025