[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Changes to CASL abstract syntax from v0.94
Version 0.95 FINAL DRAFT was announced on cofi-list yesterday;
if you didn't receive it, please refer to the archives of cofi-list.
(All CoFI participants are expected to subscribe to cofi-list.
BTW, I've at last updated the majordomo info files, so they no longer
refer to the non-existent cofi-task - sorry for any confusion caused!)
All significant changes to the CASL abstract syntax between v0.94 and
v0.95 should be indicated below by exclamation marks in the left margin.
Please let me know if I've inadvertently missed some. (I don't count
uniform changes of nonterminal as significant.)
Note that several of the changes are marking replacement of ... X X+
by ... X+ - the restriction to lists with at least two items is now
merely a well-formedness condition. Some of the other marked changes
are just internal reorganization of the tree structure of the abstract
syntax.
Peter
---- --------------------------------------------
\ / | Peter D Mosses <pdmosses@brics.dk> |
CoFI | Common Framework Initiative - Coordinator |
/ \ | WWW URL: http://www.brics.dk/Projects/CoFI |
---- --------------------------------------------
Appendix A: Abstract Syntax
Basic Specifications
BASIC-SPEC ::= basic-spec BASIC-ITEM*
! BASIC-ITEM ::= SIG-DECL | VAR-DECL | AXIOM
| SORT-GEN | TYPE-DEFN-GROUP
SIG-DECL ::= SORT-DECL | FUN-DECL | PRED-DECL
SORT-DECL ::= sort-decl SORT+
FUN-DECL ::= fun-decl FUN-NAME+ FUN-TYPE
PRED-DECL ::= pred-decl PRED-NAME+ PRED-TYPE
FUN-TYPE ::= fun-type TOTALITY SORT* SORT
TOTALITY ::= total | partial
PRED-TYPE ::= pred-type SORT*
! VAR-DECL ::= var-decl VAR+ SORT
AXIOM ::= FORMULA
FORMULA ::= QUANTIFICATION | CONJUNCTION | DISJUNCTION
| IMPLICATION | EQUIVALENCE | NEGATION | ATOM
QUANTIFICATION ::= quantification QUANTIFIER VAR-DECL+ FORMULA
QUANTIFIER ::= forall | exists | exists-uniquely
! CONJUNCTION ::= conjunction FORMULA+
! DISJUNCTION ::= disjunction FORMULA+
IMPLICATION ::= implication FORMULA FORMULA
EQUIVALENCE ::= equivalence FORMULA FORMULA
NEGATION ::= negation FORMULA
ATOM ::= TRUTH | PREDICATION | DEFINEDNESS | EQUATION
TRUTH ::= true | false
PREDICATION ::= predication PRED-SYMB TERM*
DEFINEDNESS ::= definedness TERM
EQUATION ::= equation QUALITY TERM TERM
QUALITY ::= existential | strong
TERM ::= VAR | APPLICATION | SORTED-TERM
APPLICATION ::= application FUN-SYMB TERM*
SORTED-TERM ::= sorted-term TERM SORT
SORT-GEN ::= sort-gen SORT+ FUN-SYMB+
TYPE-DEFN-GROUP ::= type-defn-group TYPE-DEFN+ AXIOM*
! TYPE-DEFN ::= type-defn SORT ALTERNATIVE+
ALTERNATIVE ::= CONSTRUCT
CONSTRUCT ::= construct FUN-NAME COMPONENT*
COMPONENT ::= SORT | SELECTION
SELECTION ::= selection FUN-NAME SORT
FUN-SYMB ::= fun-symb FUN-NAME FUN-TYPE?
PRED-SYMB ::= pred-symb PRED-NAME PRED-TYPE?
! SORT ::= SIMPLE-ID
FUN-NAME ::= SIMPLE-ID
PRED-NAME ::= SIMPLE-ID
! VAR ::= SIMPLE-ID
Basic Specifications with Subsorts
BASIC-ITEM ::= ... | EMBEDDING-DECL | PRED-SORT-DEFN
! EMBEDDING-DECL ::= embedding-decl SORT-LAYER+
SORT-LAYER ::= sort-layer SORT+
PRED-SORT-DEFN ::= pred-sort-defn SORT VAR-DECL FORMULA
ATOM ::= ... | MEMBERSHIP
MEMBERSHIP ::= membership TERM SORT
TERM ::= ... | CAST
CAST ::= cast TERM SORT
ALTERNATIVE ::= ... | SORT
Modular Specifications
SPEC ::= BASIC-SPEC | TRANSLATION | REDUCTION
| UNION | EXTENSION | FREE-SPEC
TRANSLATION ::= translation SPEC SIG-MORPH
REDUCTION ::= reduction RESTRICTION SPEC
! RESTRICTION ::= restriction EXPOSURE SYMB+
! EXPOSURE ::= hiding | revealing
SYMB ::= SORT | FUN-SYMB | PRED-SYMB
! UNION ::= union SPEC+
EXTENSION ::= extension OF-SPEC* SPEC
OF-SPEC ::= PERSISTENT-SPEC | SPEC
PERSISTENT-SPEC ::= persistent-spec SPEC
FREE-SPEC ::= free-spec SPEC
SIG-MORPH ::= sig-morph SYMB-MAP*
SYMB-MAP ::= SORT-MAP | FUN-SYMB-MAP | PRED-SYMB-MAP
SORT-MAP ::= sort-map SORT SORT
FUN-SYMB-MAP ::= fun-symb-map FUN-SYMB FUN-SYMB
PRED-SYMB-MAP ::= pred-symb-map PRED-SYMB PRED-SYMB
Generic Specifications
! SPEC-DEFN ::= spec-defn SPEC-NAME GEN-SPEC
SPEC-NAME ::= SIMPLE-ID
! GEN-SPEC ::= gen-spec OF-SPEC* SPEC
SPEC ::= ... | SPEC-INST
SPEC-INST ::= spec-inst SPEC-NAME FITTING-ARG*
FITTING-ARG ::= fitting-arg SPEC SIG-MORPH?
SORT ::= ...| COMPOUND-ID
FUN-NAME ::= ...| COMPOUND-ID
PRED-NAME ::= ...| COMPOUND-ID
COMPOUND-ID ::= compound-id SIMPLE-ID ID+
ID ::= SIMPLE-ID | COMPOUND-ID
Architectural Specifications
! ARCH-SPEC-DEFN ::= arch-spec-defn SPEC-NAME ARCH-SPEC
! ARCH-SPEC ::= arch-spec UNIT-DECL+ RESULT-UNIT
UNIT-DECL ::= unit-decl UNIT-NAME UNIT-SPEC
UNIT-NAME ::= SIMPLE-ID
! UNIT-SPEC-DEFN ::= unit-spec-defn SPEC-NAME UNIT-SPEC
! UNIT-SPEC ::= SPEC-NAME | UNIT-TYPE
UNIT-TYPE ::= unit-type SPEC* SPEC
! RESULT-UNIT ::= result-unit UNIT-DECL* UNIT-TERM
UNIT-TERM ::= UNIT-APPL | UNIT-REDUCT
UNIT-APPL ::= unit-appl UNIT-NAME UNIT-TERM*
UNIT-REDUCT ::= unit-reduct SIG-MORPH UNIT-TERM
Specification Libraries
LIBRARY ::= library LIBRARY-ITEM*
! LIBRARY-ITEM ::= SPEC-DEFN | ARCH-SPEC-DEFN | UNIT-SPEC-DEFN
Simple Identifiers
SIMPLE-ID -- structure insignificant for abstract syntax