COMP36411: Understanding Programming Languages (2011-2012)
Students taking this module should gain a deeper understanding of some of the standard programming language constructs and of the overall structure of a programming language and should develop an appreciation of the role of formal semantics in the design and precise definition of a programming language.
|Programme outcome||Unit learning outcomes||Assessment|
|A1 B1 D6||Be able to specify a simple imperative programming language using natural, structural operational, denotational, continuation, and axiomatic semantics.|
|A1 B1 D6||Be able to show how two different specifications are related.|
|A1 B1 D6||Be able to extend the specification of a simple imperative programming language to more complex constructions.|
Syntax and Semantics. BNF and abstract syntax; the meaning of expressions; approaches to semantics - operational/denotational/axiomatic.
Natural semantics for while; non-determinism; parallelism. Structural Operational Semantics: Structural operational semantics for while; non-determinism; parallelism. Equivalence.
Compiling to abstract machine code; executing abstract machine code; equivalence.
Direct-style semantics; fixpoints; equivalence; continuation semantics.
Direct use of Natural, Structural Operational and Denotational Semantics for Correctness. Assertions and inference. Soundness and completeness.