SPEC ::= BASIC-SPEC
| SPEC RENAMING
| SPEC RESTRICTION
| SPEC and SPEC and...and SPEC
| SPEC then SPEC then...then SPEC
| free GROUPED-SPEC
| local SPEC within SPEC
| closed GROUPED-SPEC
| GROUPED-SPEC
GROUPED-SPEC ::= { SPEC }
| SPEC-NAME
| SPEC-NAME [ FIT-ARG ]...[ FIT-ARG ]
RENAMING ::= with SYMB-MAP-ITEMS ,..., SYMB-MAP-ITEMS
RESTRICTION ::= hide SYMB-ITEMS ,..., SYMB-ITEMS
| reveal SYMB-MAP-ITEMS ,..., SYMB-MAP-ITEMS
SPEC-DEFN ::= spec SPEC-NAME = SPEC end/
| spec SPEC-NAME SOME-GENERICS = SPEC end/
SOME-GENERICS ::= SOME-PARAMS | SOME-PARAMS SOME-IMPORTS
SOME-PARAMS ::= [ SPEC ]...[ SPEC ]
SOME-IMPORTS ::= given SPEC-NAME ,..., SPEC-NAME
FIT-ARG ::= SPEC fit SYMB-MAP-ITEMS ,..., SYMB-MAP-ITEMS
| SPEC
| view VIEW-NAME
| view VIEW-NAME [ FIT-ARG ]...[ FIT-ARG ]
VIEW-DEFN ::= view VIEW-NAME : VIEW-TYPE end/
| view VIEW-NAME : VIEW-TYPE =
SYMB-MAP-ITEMS ,..., SYMB-MAP-ITEMS end/
| view VIEW-NAME SOME-GENERICS : VIEW-TYPE end/
| view VIEW-NAME SOME-GENERICS : VIEW-TYPE =
SYMB-MAP-ITEMS ,..., SYMB-MAP-ITEMS end/
VIEW-TYPE ::= SPEC -> SPEC
SYMB-ITEMS ::= SYMB
| SOME-SYMB-KIND SYMB ,..., SYMB
SYMB-MAP-ITEMS ::= SYMB-OR-MAP
| SOME-SYMB-KIND SYMB-OR-MAP ,..., SYMB-OR-MAP
SOME-SYMB-KIND ::= sort/sorts | op/ops | pred/preds
SYMB ::= ID | QUAL-PRED-NAME | QUAL-OP-NAME
SYMB-MAP ::= SYMB "|->" SYMB
SYMB-OR-MAP ::= SYMB | SYMB-MAP
SPEC-NAME ::= SIMPLE-ID
VIEW-NAME ::= SIMPLE-ID
TOKEN-ID ::= ... | TOKEN [ ID ,..., ID ]
MIXFIX-ID ::= ... | TOKEN-PLACES [ ID ,..., ID ]