\begin{syntax} expr ::= integer ; integer constant | real ; real constant | "true" | "false" ; Boolean constant | "()" ; empty tuple | qualid ; identifier in a scope | qualifier? "(" expr ")" ; expression in a scope | qualifier? "begin" expr "end" ; \textit{idem} | tight-op expr ; tight operator | "{" (lqualid "=" expr ";")+ "}" ; record | "{" expr "with" (lqualid "=" expr ";")+ "}" ; record update | expr "." lqualid ; record field access | expr "[" expr "]" "'"* ; collection access | expr "[" expr "<-" expr "]" "'"* ; collection update | expr "[" expr ".." expr "]" "'"* ; collection slice | expr "[" expr ".." "]" "'"* ; right-open slice | expr "[" ".." expr "]" "'"* ; left-open slice | expr expr+ ; application | prefix-op expr ; prefix operator | expr infix-op-4 expr ; infix operator 4 | expr infix-op-3 expr ; infix operator 3 | expr infix-op-2 expr ; infix operator 2 | expr infix-op-1 expr ; infix operator 1 | "not" expr ; negation | expr "&&" expr ; lazy conjunction | expr "||" expr ; lazy disjunction | expr ":" type ; type cast | attribute+ expr ; attributes | "ghost" expr ; ghost expression | expr ("," expr)+ ; tuple | expr "<-" expr ; assignment | ... ; continued in Fig.~\ref{fig:bnf:expr2} % \end{syntax}