Nella lezione del 6/X/2008 abbiamo analizzato le strutture di un linguaggio di programmazione, a partire dagli identificatori. Distinguiamo due tipi principali di identificatori, variabili e funzioni (notate però che anche le etichette sono identificatori). In linea di principio, entrambi sono caratterizzati da nome, spazio di visibilità, tipo, indirizzo e valore. Abbiamo anche visto, però, che in molti casi alcuni di questi elementi possono essere assenti, o cambiare durante la vita del programma.
Nella seconda parte della lezione, abbiamo visto come usare un semplice linguaggio simile ad un assembler (SIMPLESEM) per definire la semantica operazionale di un linguaggio di alto livello simile al C, partendo da una versione molto semplificata, senza chiamate a funzione, per poi aggiungere questa caratteristica in vari passi. Completeremo la discussione di questo argomento mercoledì prossimo, aggiungendo i linguaggi C4 e C5.
In the first part of this lecture, we have introduced the main elements of a programming language, variables and functions, represented as tuples of five elements (name, scope, type, address/l-value, value/r-value).
In the second part, we have introduced a simple assembly-like language, SIMPLESEM, to define the operational semantics of a high-level language similar to C. We have then shown the operational semantics of the C1, C2 and C3 toy languages, respectively composed of: simple constructs only (no function calls); non-recursive function calls; and recursive function calls.