TypedParameter::
name : seqofchar
data : Parameter;
OmittedParameter:: ;
UnknownParameter::
operations
CheckReferences: Parameter ==> setofnat
CheckReferences(parm) == cases parm:
mk_EntityInstanceName(id) -> return {id},
mk_ListParameter(parms) ->
( dcl res : setofnat := {}; for subparm in parms do
res := res union CheckReferences(subparm); return res), others -> return {} end;
FindAllReferencesToEntity: nat ==> setofnat
FindAllReferencesToEntity (eid) == let eins = dom in_model.datasec \ {eid} in
( dcl res : setofnat := {}; forall ein inset eins do let mk_(-,mk_SimpleRecord(-,parms)) =
in_model.datasec(ein) in if eid inset CheckReferences(
mk_ListParameter(parms)) then res := res union {ein}; return res
);
FindAllInstances: seqofchar ==> setofnat
FindAllInstances(nm) == let eins = dom in_model.datasec in
( dcl res : setofnat := {}; forall ein inset eins do let mk_(-,rec) = in_model.datasec(ein) in if IsA (rec, nm) then res := res union {ein}; return res
);
LookUpEntityInstance: nat ==> [Record]
LookUpEntityInstance (ein) == let eins = dom in_model.datasec in if ein inset eins thenlet mk_(-,rec) = in_model.datasec(ein) in return rec elsereturnnil;
TransformRmVertex: nat ==> nat
TransformRmVertex(rmv_id) == let mk_SimpleRecord(-,parms) = LookUpEntityInstance (rmv_id) in let mk_EntityInstanceName(cpnt_id) = parms(5) in return cpnt_id;
TransformRmEdge: nat ==> setof (nat * nat)
TransformRmEdge (rme_id) == let mk_SimpleRecord(-,parms) = LookUpEntityInstance(rme_id) in let mk_ListParameter(rmees) = parms(3) in
( dcl res : setof (nat * nat) := {}; for rmee in rmees do let mk_EntityInstanceName(rmee_id) = rmee in let {rmee_ref} = FindAllReferencesToEntity(rmee_id)\{rme_id} in
res := res union {mk_(rme_id, TransformRmVertex(rmee_ref))}; return res
);
TransformRmLoop: nat ==> seqofnat
TransformRmLoop (rml_id) == let mk_SimpleRecord(-,parms) = LookUpEntityInstance (rml_id) in let mk_ListParameter(rmess) = parms(2) in
( dcl res : setof (nat * nat) := {}; for rmes in rmess do let mk_EntityInstanceName(rmes_id) = rmes in let rme_ref = FindAllReferencesToEntity(rmes_id) \ {rml_id} in forall rme_id inset rme_ref do
res := res union TransformRmEdge(rme_id); return SortPoints(res)
);
Transform: () ==> setofseqofnat
Transform () == let rmls = FindAllInstances("RM_LOOP") in
( dcl res : setofseqofnat := {}; forall rml inset rmls do
res := res union {TransformRmLoop(rml)}; return res
);
IsA: Record * seqofchar -> bool
IsA(rec,nm) == if is_SimpleRecord(rec) then let mk_SimpleRecord (name,-) = rec in
nm = name else false;
SortInnerLeft: setof (nat * nat) * nat -> seqofnat
SortInnerLeft (theSet, goal) == cases theSet:
{} -> [], others -> let mk_(a,b) inset theSet best a = goal in
SortInnerRight(theSet\{mk_(a,b)}, b) end;
SortInnerRight: setof (nat * nat) * nat -> seqofnat
SortInnerRight (theSet,goal) == cases theSet:
{} -> [], others -> let mk_(a,b) inset theSet best b = goal in
[b] ^ SortInnerLeft(theSet\{mk_(a,b)}, a) end;
SortPoints : setof (nat * nat) -> seqofnat
SortPoints (theSet) == let mk_(a,b) inset theSet in
SortInnerRight(theSet\{mk_(a,b)},b)
state Kernel of
in_model : PhysicalFile
out_model : PhysicalFile
last_id : nat init
k == k = mk_Kernel(
mk_PhysicalFile({|->},{|->}),
mk_PhysicalFile({|->},{|->}),
0
) end
end Database
\end{vdm_al}
\printindex
\end{document}
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.