While reading papers about computer science and programming languages I often stumble on terms denotational semantics and operational semantics. Sometimes, but rarely, I also find axiomatical ones. While I know what semantics are, I don't get the distinction between these three – what is the actual classification?
Some example would be extremely useful.
This is straight out of the preface of the wonderful book "The Formal Semantics of Programming Languages," by Glynn Winskel (MIT Press, 1993):
So, these are different approaches to reasoning about the meaning of programs, with the overall goal of being able to show that a particular program works "correctly." They are not in opposition to each other: Each technique has its uses, and often can be used together for studying various aspects. For instance, when reasoning about Haskell, one typically uses a denotational approach for the pure fragment (essentially that of recursive functions), and an operational approach for reasoning about IO and concurrency. A typical imperative language (Pascal or C like) typically uses axiomatic semantics to reason about correctness in the form of weakest preconditions.
I'd strongly recommend reading through Winskel's book if you can get your hands on it, as it provides a detailed yet very accessible account of all three techniques.