The semantics of the enclosing brackets are defined below.
Top level
1. change change_name ; change_context
change_body list end_change ;
change_context
2. context schema_name ;
change_body_list
3. change_body { change_body
}
change_body
4. add entity 'regular definition of entity as in express' end_entity ;
5. drop entity entity_name ;
6. alter entity entity_name [ supersub_list
] ;
[ attribute_list
]
[ inverse attribute_list ]
[ unique unique_list
]
[ where where_list ]
end_entity ;
7. alter entity entity_name as entity_name ;
8. add type 'regular definition of type as in express' end_type ;
9. drop type type_name ;
10. alter type type_name type_change_list
[ where where_list ] end_type ;
11. alter type type_name as type_name ;
supersub_list
12. supersub { supersub
}
supersub
13. ( drop | add ) subtype of '(' entity_name { , entity_name
} ')'
14. ( drop | add ) supertype of '(' entity_name {, entity_name
} ')'
15. ( drop | add ) abstract
attribute_list
16. attribute_spec { attribute_spec }
attribute_spec
17. add attribute_name : 'regular definition of attribute as in
express' ;
18. drop attribute_name ;
19. alter attribute_name attribute_change_list
;
attribute_change_list
20. attribute_or_type_change { attribute_or_type_change }
attribute_or_type_change
21. ( attribute_change | type_change )
attribute_change
22. ( drop | add ) optional
23. alter for as attribute_name
24. [alter] invert
25. as attribute_name
type_change_list
26. type_change { type_change
}
type_change
27. alter [ aggregate ] ( lower_bound | upper_bound ) as bound_spec
28. ( drop | add ) [ aggregate ] unique
29. alter aggregate as aggr_name
30. drop aggregate
31 add aggregate 'aggregate specification as in express'
32. alter type as 'type specification as in express'
33. alter precision as 'precision specification as in express'
34. add enumeration enum_value { , enum_value }
35. drop enumeration enum_value { , enum_value }
36. alter enumeration enum_value as enum_value
where_list
37. where_change { where_change
}
where_change
38. ( add | alter ) label : 'where specification as in express'
;
39. alter label as label ;
40. drop label ;
unique_list
41. unique_change { unique_change
}
unique_change
42. add label : 'unique specification as in express' ;
43. drop label ;
43. alter label unique_attribute_change_list
;
44. alter label as label ;
unique_attribute_change_list
44. unique_attribute_change { unique_attribute_change }
unique_attribute_change
45. drop attribute_name { , attribute_name }
46. add attribute_name { , attribute_name } (
first | last )
47. add attribute_name { , attribute_name } (
before | after ) attribute_name
Embedded Remark
Note that the specifications above do not include the embedded remark that can occur
almost anywhere.
48. '(*' [ '<' tag_name '>' ] [ '(' tag_parameter ')' ] text '*)'
Tag_name
49. ( desc | remark | verb | population | request | status | projmeth | projname |
projindex | projnk )
Tag_parameter
50. ( first | last )