An approach to the semantics of programming languages that uses the concept of an “abstract machine” that has a state and some primitive instructions or rules that cause the states to change. The machine is defined by specifying how the components of the state are changed by each of the instructions or rules. Computations are sequences of state transitions. The abstract machine is not meant to be a model of any realistic machine or machine language; it is meant to be simple enough so that the language can be unambiguously defined by simple rules for state transitions. The semantic description of a programming language specifies a translation into this operational model. Examples of this approach include the Vienna Definition Language used to define PL/I, which was the first method for defining the semantics of a programming language.