Luca Dan Șerbănați all'esame di maturità, 1961
Luca Dan Șerbănați nei primi anni Settanta
Luca Dan Șerbănați all'ultima lezione del quinto anno, aprile 1989

Luca Dan Șerbănați

Professore emerito alla Politehnica di Bucarest

Ricerca, insegnamento, industria e memorie

RO | EN | IT
Luca Dan Șerbănați a Venezia, 1990
Luca Dan Șerbănați a New York, 2005
Luca Dan Șerbănați

Origini didattiche

Il libro del 1987 trae origine da una serie di tre manuali universitari, comprendenti le quattro parti del corso, pubblicati tra il 1982 e il 1984:

La serie fu consolidata e sviluppata in questo volume, destinato non soltanto agli studenti, ma anche agli informatici interessati ad approfondire i linguaggi di programmazione e, soprattutto, i loro traduttori.

Copertina

Copertina del libro «Linguaggi di programmazione e compilatori», 1987

Sintesi

Il libro «Linguaggi di programmazione e compilatori» (Editura Academiei RSR, 1987) è concepito come una sintesi unitaria tra i fondamenti teorici e le tecniche ingegneristiche necessarie per definire e implementare i linguaggi di programmazione. Deriva da un corso avanzato di lunga durata, articolato su tre semestri e tenuto a partire dal 1980, nel quale riunivo teoria degli automi, linguaggi formali e compilatori. Il suo obiettivo è insieme umano e tecnico: il linguaggio costituisce la principale convenzione di cooperazione tra uomo e calcolatore, mentre il compilatore è il meccanismo che rende eseguibile tale convenzione, trasformando i programmi da descrizioni in processi reali, non mediante ricette isolate, ma attraverso una metodologia coerente.

L’idea centrale del libro è che la traduzione dei programmi possa essere trattata come un’operazione formalizzabile: una trasformazione sistematica tra due descrizioni dello stesso algoritmo, dal linguaggio sorgente verso forme più vicine alla macchina. In questo quadro, a ogni linguaggio corrisponde implicitamente una macchina virtuale che attribuisce significato ai suoi costrutti, mentre la compilazione diventa la disciplina d’interfaccia tra l’universo di tale macchina virtuale e quello della macchina reale.

La struttura è esplicitamente tripartita, preceduta da un’introduzione concettuale sui sistemi, l’informazione, la comunicazione, i linguaggi e la traduzione. L’intento è chiarire che un compilatore non è un espediente tecnico, ma la risposta a una necessità generale di trasformazione controllata delle rappresentazioni:

  • Parte I – Linguaggi di programmazione. Costruisce l’«anatomia» dell’oggetto da tradurre. I linguaggi sono analizzati come sistemi stratificati sul piano lessicale, sintattico e semantico, attraverso la prospettiva dell’implementazione: variabili, compresa la dualità indirizzo/valore, attributi e binding, dichiarazioni, strutture dati, espressioni e istruzioni, procedure e passaggio dei parametri, gestione della memoria in esecuzione mediante allocazione statica, stack e heap.
  • Parte II – Introduzione alla teoria della compilazione. Presenta il formalismo strettamente necessario alla progettazione dei compilatori: gerarchia di Chomsky, linguaggi regolari e liberi dal contesto, automi finiti e automi a pila, schemi di traduzione guidata dalla sintassi, automi di traduzione e grammatiche attribuite di Knuth, come ponte tra sintassi e semantica.
  • Parte III – Progettazione dei compilatori. È il «laboratorio» nel quale il compilatore diventa una vera catena di produzione: analisi lessicale, analisi sintattica mediante le famiglie LL e LR, analisi semantica, codice intermedio — alberi, codice a tre indirizzi e backpatching —, tabella dei simboli, gestione degli errori, ottimizzazioni, generazione del codice oggetto, interpreti, assembler e macroassembler, fino ai moduli rilocabili e al ruolo del linker.

Il libro si distingue per il rifiuto di separare la teoria dalla pratica: ogni tema segue il percorso «motivazione – algoritmo – implementazione», formando non soltanto conoscenze tecniche, ma anche una disciplina del pensiero. Un elemento unificante è il ricorso sistematico al modello di «macchina» — astratta o virtuale, dotata di stati, pila, tabelle e azioni — che struttura la medesima logica dal riconoscimento alla traduzione e fino alla generazione del codice, offrendo al lettore un modo di pensare estensibile alla progettazione di altre applicazioni software complesse.

Collegamenti