Formal semantics of programming languages
The formal semantics of a language is given by a mathematical model to represent the possible computations described by the language.
There are many approaches to providing a formal semantics for programming languages. The three main classes of approach are:
- Denotational semantics, including domain theory;
- Operational semantics, such as abstract machine models , most famously the SECD machine;
- Axiomatic semantics, for example predicate transformer semantics and algebraic semantics .
but additionally there are awkward cases that do not obviously fit into the above classes, such as:
- Action semantics, which seems to be a kind of hybrid of axiomatic and operational semantics;
- Categorical semantics (also called Functorial semantics ), which is most easily understood as an algebraic semantics (and so is an axiomatic semantics), but which can also be understood as a kind of denotational semantics, and indeed familiarity with category theory is today a requirement for understanding most work in denotational semantics;
- Game semantics was proposed as a kind of denotational semantics, but it has a dynamical aspect that allows it to be understood as a kind of operational semantics.
The field of formal semantics also studies the relations between different models, the relations between different approaches to meaning, and the relation between computation and the underlying mathematical structures, from fields such as logic, set theory, model theory, category theory, etc.