The language for Duro expressions is a subset of Tutorial D, as defined in TTM, third edition, with a few differences:
expression = with | ifthenelse
| project | select | rename | relation
| extend | update | summarize | divideby
| wrap | unwrap | group | ungroup
| expression OR expression
| expression AND expression
| NOT expression
| rel_expression
| '+' expression | '-' expression
| expression '+' expression
| expression '-' expression
| expression '||' expression
| expression '*' expression
| expression '/' expression
| var_expression
| literal
| count_invocation
| aggregate_invocation
| '(' expression ')'
| expression '.' id
| id FROM expression
| TUPLE FROM expression.
project = expression '{' [ALL BUT] [id {',' id}] '}'.
select = expression WHERE expression.
rename = expression RENAME '(' [id AS id {',' id AS id}] ')'.
relation = expression UNION expression
| expression INTERSECT expression
| expression MINUS expression
| expression SEMIMINUS expression
| expression JOIN expression
| expression SEMIJOIN expression.
extend = EXTEND expression ADD '(' [expression AS id {',' expression AS id}] ')'.
update = UPDATE expression '{' [id ':=' expression {',' id ':=' expression}] '}'.
summarize = SUMMARIZE expression PER expression
ADD '(' [summary AS id {',' summary AS id}] ')'.
divideby = expression DIVIDEBY expression PER expression.
summary = COUNT '(' ')' | summary_type '(' expression ')'.
summary_type = SUM | AVG | MAX | MIN | ALL | ANY.
wrap = expression WRAP '(' [wrapping {',' wrapping}] ')'.
wrapping = '{' [id {',' id}] '}' AS id.
unwrap = expression UNWRAP '(' [id {',' id}] ')'.
group = expression GROUP '{' [id {',' id}] '}' AS id.
ungroup = expression UNGROUP id.
var_expression = id | id '(' [id {',' id}] ')' | var_expression '[' expression ']'.
with = WITH [expression AS id {',' expression AS id}] ':' expression.
rel_expression = expression | expression '=' expression
| expression '<>' expression
| expression '!=' expression
| expression '>=' expression
| expression '<=' expression
| expression '>' expression
| expression '<' expression
| expression IN expression
| expression MATCHES expression
| expression SUBSET_OF expression.
ifthenelse = IF expression THEN expression ELSE expression.
count_invocation = COUNT '(' expression ')'.
aggregate_invocation = summary_type '(' ne_expression_list ')'.
operator_invocation = 'THE_'id '(' expression ')'
| id '(' expression_list ')'.
literal = string | integer | decimal | float | TRUE | FALSE
| TUPLE '{' tuple_item_list '}'
| RELATION '{' expression_list '}' | TABLE_DEE | TABLE_DUM.
tuple_item_list = [ne_tuple_item_list].
expression_list = [ne_expression_list].
ne_expression_list = expression {',' expression}.
ne_tuple_item_list = id expression {',' id expression}.
string = '"'{char_lit}'"' | "'"{char_lit}"'".
char_lit = char | '\"' | '\\' | '\n' | '\r' | '\t'.
integer = digit{digit}.
decimal = digit{digit}'.'digit{digit}.
float = digit{digit}'.'digit{digit}('E' | 'e')digit{digit}.
id = letter{letter | digit | '_' | '#'}.
$Id: expressions.html,v 1.26 2008/02/24 19:33:28 rhartmann Exp $