04138 - LINGUAGGI DI PROGRAMMAZIONE

Anno Accademico 2020/2021

  • Docente: Roberto Gorrieri
  • Crediti formativi: 12
  • SSD: INF/01
  • Lingua di insegnamento: Italiano
  • Moduli: Maurizio Gabbrielli (Modulo 1) Roberto Gorrieri (Modulo 2)
  • Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
  • Campus: Bologna
  • Corso: Laurea in Informatica (cod. 8009)

Conoscenze e abilità da conseguire

Al termine del corso, lo studente: - conosce i principali concetti della teoria dei linguaggi formali e li sa applicare per la classificazione di semplici linguaggi; - conosce le principali tecniche per l'analisi sintattica dei linguaggi di programmazione; - conosce la struttura di un linguaggio di programmazione e le tecniche per implementare la sua macchina astratta; - conosce il paradigma orientato agli oggetti ed un altro paradigma non imperativo.

Contenuti

Il corso è strutturato in due moduli, strettamente integrati.

Primo modulo, primo semestre; docente: Maurizio Gabbrielli

http://www.unibo.it/SitoWebDocente/default.htm?UPN=maurizio.gabbrielli%40unibo.it


Evoluzione dei linguaggi di programmazione: Dai linguaggi assembler ai linguaggi ad alto livello. Macchine astratte, interpreti, compilatori. Ambiente, regole di scoping e loro implementazione. Pila dei record di attivazione; heap. Gestione della memoria: garbage collection. Controllo di sequenza, procedure, ricorsione. Tipi e controllo di tipo. Parametri e modalità di passaggio: per valore, per riferimento, per risultato, per nome. Parametri funzionali. Chiusure. Eccezioni. Il paradigma object-oriented: classi e oggetti, inizializzazione, inheritance e late-binding, il modello operazionale, differenza tra subtyping e inheritance. Cenni al paradigma logico: unificazione, derivazioni SLD, Prolog. Cenni al paradigma funzionale: Scala. Cenni alla programmazione concorrente e service oriented: Jolie.

Secondo modulo, secondo semestre;  docente: Roberto Gorrieri 

http://www.cs.unibo.it/~gorrieri/

Descrizione di un linguaggio: Sintassi, semantica, pragmatica e implementazione. Sinatssi in BNF. Semantica operazionale strutturata (SOS). Grammatiche regolari, automi finiti, espressioni regolari: equivalenze e risultati principali (p.e., pumping lemma). Costruzione di analizzatori lessicali; cenni a Lex. Grammatiche libere da contesto, automi a pila: equivalenze e risultati principali (p.e., pumping theorem). Grammatiche libere deterministiche: algoritmi di riconoscimento e costruzione dell'albero di derivazione; grammatiche LL(1), LR(0), SLR, LR(1), LALR(1). Cenni a YACC.



Testi/Bibliografia

Maurizio Gabbrielli, Simone Martini Linguaggi di programmazione: principi e paradigmi. Seconda edizione. McGraw-Hill Italia, 2010. ISBN 88-386-6573-8.

Metodi didattici

Lezioni frontali ed esercitazioni

Modalità di verifica e valutazione dell'apprendimento

Esame scritto ed esame orale (da sostenersi nella stessa sessione). Un solo esame copre entrambe i moduli.
Potranno essere somministrati compiti durante l'anno che daranno luogo all'esonero dallo scritto (ma non dall'orale).

Strumenti a supporto della didattica

https://iol.unibo.it/course/view.php?id=45017

http://www.cs.unibo.it/~gorrieri/LP/lp.html (login:esame password:linguaggi)

http://www.cs.unibo.it/~gabbri/corsi/linguaggi.html

Orario di ricevimento

Consulta il sito web di Roberto Gorrieri

Consulta il sito web di Maurizio Gabbrielli

SDGs

Parità di genere Lavoro dignitoso e crescita economica

L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.