CODICE 80269 ANNO ACCADEMICO 2017/2018 CFU 6 cfu anno 2 INGEGNERIA INFORMATICA 8733 (LM-32) - SETTORE SCIENTIFICO DISCIPLINARE ING-INF/05 LINGUA Italiano SEDE PERIODO 1° Semestre PRESENTAZIONE Il corso ha lo scopo di introdurre la teoria dei linguaggi formali e di illustrarne l'applicazione nella progettazione dei compilatori. Particolare enfasi verrà posta verso la progettazione di applicazioni per l’interazione uomo-macchina e nell’ambito della progettazione di sistemi web-based. OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI L'obiettivo del corso è quello di fornire gli strumenti, sia formali che pratici, per la definizione dei linguaggi di programmazione e dei loro traduttori e fornire competenze di progettazione di applicativi e sistemi web interoperabili nel rispetto degli standard internazionali. Il corso si propone di fornire una preparazione necessaria alla formazione dei profili di competenze degli Ingegneri dell’Informazione che si stanno affermando a livello nazionale ed europeo. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Ai fini sopra indicati, il corso è organizzato in tre parti con i seguenti obiettivi specifici Nella prima parte, l'obiettivo è quello di introdurre i “modelli di riferimento” per l’informatica e descrivere le proprietà delle più importanti classi di linguaggi formali e delle loro rappresentazioni; Nella seconda parte, l'obiettivo è quello di analizzrea la struttura dei compilatori, esaminando le principali fasi del processo di traduzione, le problematiche associate a ciascuna di esse e le relative tecniche di soluzione; Nella terza partel'obiettivo è quello di fornire gli strumenti base per l’elaborazione del linguaggio naturale, al fine di progettare sistemi di interazione uomo-macchina per l’accesso semantico e personalizzato all’informazione. Saranno introdotti inoltre i meccanismi di accesso all’informazione nell’ambito del cosiddetto Web 2.0, e del recente Web of Data. Tutto questo ai fini di fare acquisire le conoscenze, abilità e competenze necessarie ad un Ingegnere Informatico per: essere in grado di mettere in relazione risultati della teoria dei linguaggi formali con le tecniche di base per la costruzione di analizzatori lessicali e sintattici di linguaggi di programmazione, essere inoltre in grado di utilizzare i risultati della teoria dei linguaggi formali per la progettazione di interfacce uomo-macchina e per la progettazione di sistemi web interoperabili, facendogli altresì comprendere come gli standard web non costituiscono un limite alla progettazione, ma bensì un modo per creare una nuova generazione di applicazioni web che permettono di abbattere i costi della progettazione, sviluppo e verifica della qualità nel rispetto delle normative vigenti e in termini di accessibilità. MODALITA' DIDATTICHE Durante lo svolgimento dell'insegnamento verrà chiesto allo studente di partecipare allo sviluppo di: un Progetto individuale o di gruppo (sviluppato durante le esercitazioni) in cui si utilizzeranno strumenti e metodi visti a lezione. Verrà inoltre attivato sul portale del corso un Forum di discussione sugli argomenti principali introdotti a lezione a cui gli studenti saranno invitati a partecipare. PROGRAMMA/CONTENUTO Parte I – Modelli per l’informatica ed elaborazione dei linguaggi Automi a stati finiti, Automi a pila, Macchine di Turing Introduzione alla teoria dei linguaggi Gerarchia di Chomsky Evoluzione dei linguaggi di programmazione Fondamenti dei linguaggi di programmazione Parte II – Compilatori e Interpreti Struttura di un compilatore Traduzione guidata dalla sintassi Analisi lessicale Analisi sintattica (scrittura di una grammatica, parsing top-down, bottom-up, LR) Generatori di parser Analisi semantica e Generazione codice intermedio Parte III - Elaborazione del Linguaggio Naturale e Web 2.0 Elementi di base di linguistica computazionale e risorse linguistiche Generazione del Linguaggio Naturale Accesso Intelligente all’Informazione Social tagging, folksonomie e Linked Data Attività di Laboratorio Generatori di analizzatori lessicali Generatori di parser Sviluppo di progetto individuale o di gruppo TESTI/BIBLIOGRAFIA A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman. Compilers: Principles, Techniques, and Tools, Pearson/Addison-Wesley, 2007. Edizione Italiana (2009): Compilatori: Principi, tecniche e strumenti. G.Rossi, O.Pastor, D.Schwabe, L.Olsina, Web Engineering: Modelling and Implementing Web Applications, Springer, 2008. W3C, Web Design and Applications: http://www.w3.org/standards/webdesign/. G. Adorni. Note e appunti messi a disposizione sul portale del corso. DOCENTI E COMMISSIONI GIOVANNI ADORNI Commissione d'esame GIOVANNI ADORNI (Presidente) MARCO MARATEA ARMANDO TACCHELLA LEZIONI INIZIO LEZIONI Il corso si svolge durante il primo semestre. Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L'esame finale consisterà in una discussione sul Progetto individuale o di gruppo sviluppato durante il corso e in una valutazione delle discussioni postate nel Forum durante il corso stesso. Calendario appelli Data appello Orario Luogo Tipologia Note 23/01/2018 10:00 GENOVA Prova pratica 07/02/2018 10:00 GENOVA Prova pratica 28/05/2018 10:00 GENOVA Prova pratica 28/06/2018 10:00 GENOVA Prova pratica 03/09/2018 10:00 GENOVA Prova pratica ALTRE INFORMAZIONI Propedeuticità consigliate: Conoscenze di base sui linguaggi di programmazione procedurale e sulla programmazione lato client e lato server mediante linguaggi di scripting.