Tu sei qui

Fondamenti dei linguaggi di programmazione

Fondamenti di Linguaggi di Programmazione
Corso di Laurea Triennale in Informatica F004
A.A. 2015/16
SCV0364 (SCV0073)
Docente: Mauro Ferrari


CFU SSD LEZIONI ANNO LINGUA
6 INF/01 48 II o III Italiano


Obiettivi dell’insegnamento e risultati di apprendimento attesi
Obiettivo di questo corso è presentare i concetti di base dei linguaggi di programmazione ed in particolare gli aspetti relativi ai processi di compilazione ed esecuzione di un linguaggio. Il corso consiste di una parte teorica relativa alla presentazione alle tecniche di costruzione di analizzatori lessicali e analizzatori sintattici e ad una parte applicativa relativa alla realizzazione di applicazioni sui linguaggi di programmazione, in questa seconda parte vengono presentate le tecniche di gestione degli scope, del type checking e della traduzione/esecuzione di un linguaggio di programmazione.
Conoscenza e capacità di comprensione (knowledge and under standing)
Al termine del corso lo studente possiede le conoscenze necessarie alla comprensione delle caratteristiche precipue di un linguaggio di programmazione e per la realizzazione di applicazioni su un linguaggio di programmazione.
Capacità di applicare conoscenza e comprensione (applying knowledge and understanding)
Al termine del corso lo studente è in grado di utilizzare gli strumenti per la generazione automatica di analizzatori lessicali e sintattici per costruire strumenti di analisi, traduzione o esecuzione di un linguaggio di programmazione.
Autonomia di giudizio
Al termine del corso lo studente è in grado di scegliere in autonomia di giudizio le soluzioni più adatte alla realizzazione di una specifica applicazione sui linguaggi.
Abilità comunicative
Al termine del corso lo studente è in grado di comunicare in modo compiuto e con la corretta terminologia le caratteristiche di un linguaggio di programmazione e di un’applicazione su tale linguaggio.

Prerequisiti
Lo studente che affronta questo corso deve possedere una conoscenza dettagliata dell’architettura degli elaboratori, della programmazione in linguaggio Java e delle strutture dati fondamentali.

Contenuti e programma del corso

  • Caratteristiche principali dei linguaggi di programmazione: astrazioni, type-checking, binding, modello implementativo. Lezioni ore 4;
  • Sintassi, semantica statica e sematica dinamica. lezioni ore 2;
  • Struttura di un’applicazione sui lunguaggi, traduttori e interpreti. Lezioni ore 4;
  • Linguaggi regolari. Generazione di riconoscitori di linguaggi regolari. Approcci implementativi. Lezioni ore 6;
  • Linguaggi regolari. Alberi di parsing. Ambiguità e ricorsione. Tecniche di parsing. Lezioni ore 6;
  • Parser top-down a discesa ricorsiva; grammatiche LL(k). Lezioni ore 6;
  • Uno strumento per la generazione automatica di analizzatori lessicali e parser top-down a discesa ricorsiva (ANTLR). Lezioni ore 4;
  • Tecniche di visita dell’albero di parsing: pattern basati su listener e visitor. Lezioni ore 4;
  • Semantica statica, gestione dei simboli: symbol table, scope unitari, albero di scope e scope per dati aggregati. Lezioni ore 4;
  • Type checking statico. Lezioni ore 4;
  • Traduzione in codice intermedio. Lezioni ore 4;

Tipologia delle attività didattiche
Lezioni frontali, 48 ore di lezioni teoriche corredate da esempi di implementazione.

Testi e materiale didattico

  • Libro di testo: Terence Parr, Language implementation patterns. The Pragmatic Bookshelf, 2009
  • Altro materiale (disponibile sul sito di e-learning): Slides, dispense, esempi di applicazioni.

Modalità di verifica dell’apprendimento
La prova d’esame consiste in una prova orale. Lo scopo della prova è quello di verificare che lo studente abbia compreso le caratteristiche dei linguaggi di programmazione e delle applicazioni sui linguaggi, in particolare compilatori ed interpreti.
Il voto è espresso in trentesimi.

Orario di ricevimento
Il ricevimento studenti si svolge su richiesta degli studenti.

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer