When we say how to discern the meaning of a program written in some computer language we say that we ‘provide the semantics of the language’. Most semantics proceeds by describing an order of events. We say ‘do this and then do that’ so that it is clear that changes that ‘this’ makes to the world will properly influence the behavior of doing ‘that’.

Most computer languages can express sub goals as procedures that can be called from different parts of your program. This mainly simplifies programs. When explaining the meaning of the code that calls the procedure the semantics might say ‘perform the procedure according to the rules of this report and then continue with the statement after the call’. Such a style of explanation is called “big step semantics”. Alternatively one might say ‘make a record in memory of where you are executing, then begin executing the new procedure.’. This would be accompanied with an explanation of the return command by saying ‘consult the record and cease execution here and resume obeying the program at the location described in the record.’. The detailed nature of the record is given. Such a description style is called “small step semantics”.

The person reading big step semantics may imagine the purpose of the routine being performed and then proceeding immediately with the code after the call. This will generally aid understanding the meaning of the total program. It leaves obscure situations where the routine does not return, or calls itself, or ceases execution with no appointed successor. Small step semantics can clarify the meaning of total programs with such procedures.

This distinction arrises even in explaining the meaning of arithmetic expressions that occur in the language. We might say of the syntax that a term is either a variable or a term followed by an asterisk followed by a variable. We can then say that a variable denotes whatever was last assigned to the variable and the value of a term with an asterisk is the product of the value of the inner term and that of the variable. This is a big step explanation as it requires the person who follows the explanation in order to understand x*y*z to interrupt the explanation in order to derive the meaning of x*y as a subgoal. That interruption is a big step. The reader keeps a stack of subgoals in his head instead of the semantics prescribing how the computer keeps a stack of subgoals in its memory. An alternative small step explanation is to look for the highest precedence operator in the expression and replace that binary or unary expression with its value and then consider the modified expression. No subgoals are thus required of the reader.

Big step semantics relies on the reader’s informal notion of subgoals. Small step semantics prescribes a specific subgoal mechanism. Languages with novel control mechanisms such as continuations, exceptions, event-queues and co-routines, may need small step descriptions of their semantics to be clear.