text‹
A call kind could be defined as two boolean values (@{text "is_arrow_call"},
@{text "is_safe_call"}). Also we could derive @{text "is_arrow_call"}
value automatically based on an operation kind.
However, it is much easier and more natural to use the following enumeration.›
text‹
We do not define a @{text Classifier} type (a type of all types),
because it will add unnecessary complications to the theory.
So we have to define type operations as a pure syntactic constructs.
We do not define @{text Type} expressions either.
We do not define @{text InvalidLiteral}, because it allows us to
exclude @{text OclInvalid} type from typing rules. It simplifies
the types system.
Please take a note that for @{text AssociationEnd} and
@{text AssociationClass} call expressions one can specify an
optional role of a source class (@{text from_role}).
It differs from the OCL specification, which allows one to specify
a role of a destination class. However, the latter one does not
allow one to determine uniquely a set of linked objects, for example,
in a ternary self relation.›
declare [[coercion "Literal :: 'a literal_expr ==> 'a expr"]]
abbreviation"TypeOperationCall src k op ty ≡ Call src k (TypeOperation op ty)" abbreviation"AttributeCall src k attr ≡ Call src k (Attribute attr)" abbreviation"AssociationEndCall src k from role ≡ Call src k (AssociationEnd from role)" abbreviation"AssociationClassCall src k from cls ≡ Call src k (AssociationClass from cls)" abbreviation"AssociationClassEndCall src k role ≡ Call src k (AssociationClassEnd role)" abbreviation"OperationCall src k op as ≡ Call src k (Operation op as)" abbreviation"TupleElementCall src k elem ≡ Call src k (TupleElement elem)" abbreviation"IterateCall src k its its_ty v ty init body ≡ Call src k (Iterate its its_ty v ty init body)" abbreviation"AnyIteratorCall src k its its_ty body ≡ Call src k (Iterator AnyIter its its_ty body)" abbreviation"ClosureIteratorCall src k its its_ty body ≡ Call src k (Iterator ClosureIter its its_ty body)" abbreviation"CollectIteratorCall src k its its_ty body ≡ Call src k (Iterator CollectIter its its_ty body)" abbreviation"CollectNestedIteratorCall src k its its_ty body ≡ Call src k (Iterator CollectNestedIter its its_ty body)" abbreviation"ExistsIteratorCall src k its its_ty body ≡ Call src k (Iterator ExistsIter its its_ty body)" abbreviation"ForAllIteratorCall src k its its_ty body ≡ Call src k (Iterator ForAllIter its its_ty body)" abbreviation"OneIteratorCall src k its its_ty body ≡ Call src k (Iterator OneIter its its_ty body)" abbreviation"IsUniqueIteratorCall src k its its_ty body ≡ Call src k (Iterator IsUniqueIter its its_ty body)" abbreviation"SelectIteratorCall src k its its_ty body ≡ Call src k (Iterator SelectIter its its_ty body)" abbreviation"RejectIteratorCall src k its its_ty body ≡ Call src k (Iterator RejectIter its its_ty body)" abbreviation"SortedByIteratorCall src k its its_ty body ≡ Call src k (Iterator SortedByIter its its_ty body)"
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.