You have both operational and denotaional semantics in all languages.
Operational semantics are "what does this code do," and denotaional semantics are "what does this code mean" in a more abstract sense.
In an imperative language, what a given piece of code means is "execute these instructions," so the denotaional semantics are basically equivalent to the operational semantics.
But for higher level languages, these kinds of semantics can differ. For example, in Prolog, the denotaional semantics of a given clause boils down to some formula of predicate logic, while the operational semantics is that a Prolog interpreter will perform a depth first search through the formulas to find acceptable bindings to the variables.
You can imagine another language using the same syntax as Prolog where the denotaional semantics still boils down to formulas of logic, but the operational semantics might be a breath first search through those formulas.
In other words, the denotaional semantics are the more abstract meaning of the code (like, does this code represent data, or formulas, or instructions, or something else) and the operational semantics are the more concrete meaning of the code, i.e. what should happen when the code is executed.
Generally, the denotaional semantics are what you are using in the higher level optimizers, and the operational semantics are what you are using in the lower level optimizers.
Sweatshirts are double-layered pullovers, typically non-woven. Sweaters are single-layer pullovers, typically knit. Jackets have buttons or zippers. Hoodies have hoods and are made of fabric (e.g. raincoats are not hoodies).
You can have hoodies that are also sweatshirts, or hoodies that are also jackets.
This garment pictured in your post is a jacket. It is also a hoodie. It is neither a sweatshirt nor a sweater.
This is just my interpretation of the situation. I don't know of any formal classification system for outerwear.