Duro 0.13 expression syntax

The language for Duro expressions is a subset of Tutorial D, as defined in TTM, third edition, with a few differences:

  1. Duro uses a dot ('.') operator for tuple attribute extraction, in addition to FROM.
  2. Duro supports a MATCHES operator which performs regular expression matching.
  3. Duro uses the keyword SUBSET_OF for the subset operator and IN for the element-of operator.
  4. Duro supports both single ("'") and double quotes ('"') as delimiters in string literals.
  5. GROUP and UNGROUP only support single grouping and ungrouping, as in the second edition of TTM.

Duro expression syntax (EBNF notation)

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 $