Symex allows you to delete expressions, change them to something else, move them around, translate them lower or higher in the tree, detach them from one branch and attach them to another, and so on.
These operations are all strict about structure, so, for instance, you cannot accidentally shift an expression out to a lower or higher level if you are using a lateral shift operator like symex-shift-backward
(H
) or symex-shift-forward
(L
).
The strictness of these operations allows you to be precise about code transformations. This is useful not just at the time of performing the action, but pays compounding dividends when you consider that macros and repetition can formally repeat these actions in new contexts, as the next section elaborates.