Next: obj-tech-lim, Up: obj-tech [Contents][Index]
The following BNF grammar gives a concise description of the syntax of
class definitions. It assumes an understanding of Prolog syntax for
the following items: variable, atom, compound_term,
and constant. Slot types, particularly the address, class and 
pointer types, were discussed in an earlier section.
| class_def | ::= class_begin { clause | method } class_end | 
| class_begin | ::= :- classclass_name opt_class_spec. | 
| opt_class_spec | ::= empty | =class_spec | 
| class_spec | ::= multi_parent_or_slots | term_class_spec | 
| clause | ::= head opt_body . | 
| head | ::= atom | compound_term . | 
| method | ::= message_head opt_body . | 
| message_head | ::= message_goal | 
| class_end | ::= :- end_classopt_class_name. | 
| | empty /* if followed by class_begin or eof */ | |
| message | ::= atom | compound_term | 
| multi_parent_or_slots | ::= parent_or_slots { +parent_or_slots } | 
| parent_or_slots | ::= class_name | []|[slot_def {,slot_def }] | 
| slot_def | ::= opt_visibility slot_name :slot_type opt_init_value | 
| opt_visibility | ::= empty | private|protected|public | 
| opt_init_value | ::= empty | =constant | 
| term_class_spec | ::= term(term opt_goal_essence) | 
| opt_goal_essence | ::= empty | ,goal opt_essence | 
| opt_essence | ::= empty | ,essence | 
| essence | ::= [variable:slot_type {,variable:slot_type }] | 
| opt_body | ::= empty | :-body | 
| body | ::= message_or_goal { ,message_or_goal } | 
| message_or_goal | ::= message_goal | goal | 
| message_goal | ::= variable message_operator message | 
| message_operator | ::= <<|>>|<- | 
| opt_class_name | ::= empty | class_name | 
| class_name | ::= atom | 
| slot_name | ::= atom | 
| slot_type | ::= integer | 
| | short | |
| | char | |
| | unsigned_short | |
| | unsigned_char | |
| | float | |
| | double | |
| | atom | |
| | address | |
| | term | |
| | class_name | |
| | pointer(atom) | |