  The development of mechanised language specification based on structured
operational semantics, with applications to verified compilers and sound
program analysis, requires huge effort. General theory and frameworks have been
proposed to help with this effort. However, none of this work provides a
systematic way of developing concrete and abstract semantics, connected
together by a general consistency result. We introduce a skeletal semantics of
a language, where each skeleton describes the complete semantic behaviour of a
language construct. We define a general notion of interpretation, which
provides a systematic and language-independent way of deriving semantic
judgements from the skeletal semantics. We explore four generic
interpretations: a simple well-formedness interpretation; a concrete
interpretation; an abstract interpretation; and a constraint generator for
flow-sensitive analysis. We prove general consistency results between
interpretations, depending only on simple language-dependent lemmas. We
illustrate our ideas using a simple While language.
