ConstExpr = Expr.
Expr = E1 {OR E1}.
E1 = E2 {AND E2}.
E2 = {NOT} E3.
E3 = E4 {Relop E4}.
E4 = E5 {Addop E5}.
E5 = E6 {Mulop E6}.
E6 = {"+" | "-"} E7.
E7 = E8 {Selector}.
E8 = Id | Number | CharLiteral | TextLiteral
| Constructor | "(" Expr ")".
Relop = "=" | "#" | "<" | "<=" | ">" | ">=" | IN.
Addop = "+" | "-" | "&".
Mulop = "*" | "/" | DIV | MOD.
Selector = "^" | "." Id | "[" Expr {"," Expr} "]"
| "(" [ Actual {"," Actual} ] ")".
Constructor = Type "{" [ SetCons | RecordCons | ArrayCons ] "}".
SetCons = SetElt {"," SetElt}.
SetElt = Expr [".." Expr].
RecordCons = RecordElt {"," RecordElt}.
RecordElt = [Id ":="] Expr.
ArrayCons = Expr {"," Expr} ["," ".."].