<relation exp>
::=<with exp>
|<nonwith exp>
<with exp>
::= WITH (<name intro commalist>
) :<relation exp>
<name intro>
::=<relvar name>
:=<relation exp>
<nonwith exp>
::=<image exp>
|<relation op>
| (<relation op>
)<image exp>
::= !!<nonwith exp>
| (<image exp>
)<relation op>
::=<relation selector>
|<monadic op>
|<dyadic op>
|<n-adic op>
<relation selector>
::= RELATION [<heading>
] {<tuple exp commalist>
} | TABLE_DUM | TABLE_DEE<heading>
::= {<attribute commalist>
}<attribute>
::=<attribute name> <type name>
<monadic op>
::=<relvar name>
|<rename>
|<where>
|<project>
|<extend>
|<group>
|<ungroup>
|<tclose>
<rename>
::=<relation exp>
RENAME {<renaming commalist>
}<renaming>
::=<attribute name>
AS<attribute name>
<where>
::=<relation exp>
WHERE<bool exp>
<project>
::=<relation exp>
{ [ ALL BUT ]<attribute name commalist>
}<extend>
::= EXTEND<relation exp>
: {<attribute assign commalist>
}<attribute assign>
::=<attribute name>
:=<exp>
Note: An alternative form of <attribute assign>, syntactically identical to a <relation assign> except that the pertinent <attribute name> appears in place of the target <relvar name> in that <relation assign>, is also supported if the attribute in question is relation valued.
<group>
::=<relation exp>
GROUP ( { [ ALL BUT ]<attribute name commalist>
} AS<attribute name>
)<ungroup>
::=<relation exp>
UNGROUP (<attribute name>
)<tclose>
::= TCLOSE (<relation exp>
)<dyadic op>
::=<relation exp> <dyadic op name> <relation exp>
<dyadic op name>
::= UNION | D_UNION | XUNION | INTERSECT | MINUS | I_MINUS | JOIN | TIMES | MATCHING | NOT MATCHING<n-adic op>
::=<n-adic op name>
[<heading>
] {<relation exp commalist>
}<n-adic op name>
::= UNION | D_UNION | XUNION | INTERSECT | JOIN | TIMES<relation comp>
::=<relation exp> <relation comp op> <relation exp>
<relation comp op>
::= = | ≠ | ⊆ | ⊂ | ⊇ | ⊃
<relation assignment>
::= [ WITH (<name intro commalist>
) : ]<relation assign commalist>
;<relation assign>
::=<relvar name>
:=<relation exp>
|<insert>
|<d_insert>
|<delete>
|<i_delete>
|<update>
<insert>
::= INSERT<relvar name> <relation exp>
<d_insert>
::= D_INSERT<relvar name> <relation exp>
<delete>
::= DELETE<relvar name> <relation exp>
| DELETE<relvar name>
[ WHERE<bool exp>
]<i_delete>
::= I_DELETE<relvar name> <relation exp>
<update>
::= UPDATE<relvar name>
[ WHERE<bool exp>
] : {<attribute assign commalist>
}