Eliminate automata to string casts
This CIF to CIF transformation eliminates casts of automata to strings.
Supported specifications
This transformation supports a subset of CIF specifications. The following restrictions apply:
-
Component definitions and component instantiations are not supported.
Preprocessing
No preprocessing is currently performed by this CIF to CIF transformation. To increase the subset of specifications that can be transformed, apply the following CIF to CIF transformations (in the given order):
Implementation details
All casts of automata to strings, using either implicit automaton self
references or explicit automata references, are eliminated. If the referred automaton has only a single location, the cast is replaced by a string literal with the name of that location. If the automaton has multiple locations, the cast is replaced by an if
expression, using the locations of the automaton as guards, and string literals containing the location names as values. For nameless locations the string literal "*"
is used.
For instance, consider the following CIF specification:
automaton a:
alg string x = <string>self;
location:
initial;
end
automaton b:
alg string x = <string>self;
location l1:
initial;
location l2:
end
This is transformed to the following CIF specification:
automaton a:
alg string x = "*";
location:
initial;
end
automaton b:
alg string x = if l1: "l1"
elif l2: "l2"
else "l3"
end;
location l1:
initial;
location l2;
location l3;
end
Size considerations
The created if
expressions are usually larger than the original cast expressions. The increase is linear in terms of the number of locations times the number of casts.
Optimality
This transformation introduces 'if' expressions for automaton to string casts, for automata with at least two locations. The guards of such 'if' expressions refer to the locations of the automata. To eliminate such location references, apply the Eliminate the use of locations in expressions CIF to CIF transformation.