BNF
VAR_DEF := "@" "(" <ID> ")"
| "@" "(" [<ID> ["," <ID>]*]? ")"
FUNC_DEF := <ID> ":=" <DOMAIN>
| [<VAR_DEF>]? ["->"]? <ID> ":=" <DOMAIN>
| [<VAR_DEF>]? ["->"]? <DOMAIN>
DOMAIN := "{" <BLOCK> "}"
BLOCK := [<STMT>]* [<EXPR>]?
STMT := <EXPR> ";"
EXPR := <ID>
| <LITERAL>
| <COLLECTION>
| <UN_EXPR>
| <BIN_EXPR>
UN_EXPR := "!" <EXPR>
BIN_EXPR := <EXPR> "+" <EXPR>
| <EXPR> "-" <EXPR>
| <EXPR> "*" <EXPR>
| <EXPR> "/" <EXPR>
| <EXPR> "**" <EXPR>
| <EXPR> "%" <EXPR>
| <EXPR> ">" <EXPR>
| <EXPR> ">=" <EXPR>
| <EXPR> "<" <EXPR>
| <EXPR> "<=" <EXPR>
| <EXPR> "==" <EXPR>
| <EXPR> "!=" <EXPR>
| <EXPR> "&&" <EXPR>
| <EXPR> "||" <EXPR>
COLLECTION := "(" [<EXPR> ["," <EXPR>]*]? ")"
| "[" [<EXPR> ["," <EXPR>]*]? "]"
| "{" [<EXPR> [":" <EXPR>]*]? "}"
| "<" [<ID> "=" <EXPR> ["," <ID> "=" <EXPR>]*]? ">"
LITERAL := <BOOL>
| <INT>
| <FLOAT>
| <STRING>
EXTRA := <BOOLEAN>
| <AGGR_OP>
BOOLEAN := "true"
| "false"
AGGR_OP := "sum"
| "count"
| "avg"
| "max"
| "min"
| "first"
| "last"
| "exists"
EXTERNEL_OP := "type"
| "slice"
| "lfind"
| "rfind"
INFINITE := "[" <ELLIPSIS> "]"
ELLIPSIS := "..."
Last updated