The syntax for expressions (exp) is hierarchically defined below using infix operator expressions (infix), function application expressions (appexp), atomic expressions (atexp).
expressions (top-level)
exp | ::= | infix | |
---|---|---|---|
exp : ty | |||
exp andalso exp | |||
exp orelse exp | |||
exp handle match | |||
raise exp | |||
if exp then exp else exp | |||
while exp do exp | |||
case exp of match | |||
fn match | |||
_import string : cfunty | importing C function | ||
exp : _import cfunty | importing C function | ||
_sizeof( ty ) | size of type | ||
_dynamic exp as ty | Dynamic type cast | ||
_dynamiccase exp of match | case branches with dynamic type cast | ||
_sqlserver appexp : ty | SQL servers | ||
_sql pat => sqlfn | SQL execution function | ||
_sql sql | SQL query fragments |
match | ::= | pat => exp | match | pattern matching |
---|
infix operator expressions
infix | ::= | appexp |
infix vid infix |
function application expressions
appexp | ::= | atexp | |
---|---|---|---|
appexp atexp | left associative function applications | ||
appexp # { exprow } | record field updates |
atomic expressions
atexp | ::= | scon | constants |
---|---|---|---|
op longVid | identifiers | ||
{exprow } | records | ||
(exp,,exp) | tuples () | ||
() | unit value | ||
#lab | record field selector | ||
[exp,,exp] | lists () | ||
(exp;;exp) | sequential execution | ||
let declList in exp;;exp end | local declarations | ||
_sql (sql) | SQL query fragments | ||
(exp) |
exprow | ::= | lab = exp , exprow | record fields |
---|
The definitions for cfunty is given in Section 19.21 and those for sql and sqlfn are given in Chapter 22.
The above hierarchical definition for expressions represents associatibity among expression constructors. The associatibity of infix operator expressions infix are determined not by syntax but by the infix operator declarations. In the following sections, we first define in the next (19.1) elaboration rules of infix expressions. In the following sections, we define each of expression constructors and their types in the order of associatibity.