Corso di Studi in Informatica e Tecnologie per la Produzione del Software
Dipartimento di InformaticaUniversità degli Studi di Bari

Linguaggi di Programmazione con Laboratorio [005745]

Insegnamento tenuto fino all'AA 2014. NB Appelli (su Esse3) aperti su richiesta degli studenti
Il sito per il nuovo insegnamento è sulla piattaforma e-learning ADA
Ottimizzato per Chromium / FireFox
Orario A.A. 2013-2014
lunedì 15-18 lezione aula IV / aula B
mercoledì 15-18 lezione " "
giovedì 15-18 esercitazioni " "
Ricevimento vedi orario aggiornato: Scheda UniBA

Ultime Notizie

18/05 Come anticipato, con il nuovo AA le modalità d'esame sono semplificate (vedi sez. in questa pagina). Le date saranno rese note via Esse3 e, indicativamente, dovrebbero coincidere con quelle del nuovo insegnamento (orari diversi).
16/02 Il nuovo insegnamento (AA 2015 e seguenti) ha denominazione, codice e programma diversi rispetto agli AAAA precedenti. Si raccomanda di prestare attenzione al codice insegnamento su Esse3
12/11 Si ricorda che le prove scritta e orale devono essere sostenute nel medesimo appello. Gli appelli di Nov./Apr. si devono svolgere entro il periodo di pausa dalle lezioni.
Si ricorda altresì che NON sono ammesse prenotazioni via email; in caso di problemi contattare personalmente il docente prima della chiusura delle prenotazioni. La prenotazione alla prova orale è già aperta per eventuali esonerati.
05/09 Avviso Importante. Su delibera del S.A., a partire dall'8/9 p.v. la procedura di verbalizzazione subirà alcune variazioni: la pubblicazione del voto sarà immediata, con possibilità di accettare o rifiutare il voto entro la scadenza (3-7gg). L'opzione sarà esplicita con il rifiuto come default.

Strumenti

Materiale del Corso

Si prega di non utilizzare per lo studio e la preparazione agli esami altro materiale se non i testi di seguito indicati. Materiale non verificato dal docente è vivamente sconsigliato
  • Materiale usato durante il corso (slide),
    utile a seguire meglio NON a studiare.
  • Wiki: collaborazione nello studio e coordinamento dei lavori
  • JavaCC: contiene la documentazione ufficiale e consigli per gestire il lookahead. È disponibile un Manualetto (bozza) riassuntivo. Sono gradite le correzioni sul Wiki

Programma e Testi

Programma 2014 [cfr. argomenti trattati sul Diario a fianco]
AA precedenti: 2013, 2012

Testi adottati / consigliati

(i principali sono disponibili in biblioteca)
Linguaggi di programmazione
Linguaggi Formali
limitatamente agli argomenti: ling. formali, ling. regolari e liberi, macchine per il loro riconoscimento (automi)
Compilatori

Esercitazioni

Traccia: Data la grammatica di un (frammento di un) linguaggio di programmazione, mediante strumenti automatici (JavaCC), realizzare in linguaggio Java un programma che implementi: uno scanner per un linguaggio di programmazione di cui viene documentato formalmente il vocabolario; un parser ricorsivo discendente per un frammento di linguaggio di programmazione.

Le esercitazioni svolte per la parte di laboratorio vanno documentate: eventuali assunzioni fatte, grammatiche EBNF, specifiche JavaCC e test di esecuzione (specie i casi di errore). Ogni gruppo (preferibilmente di 3 studenti) dovrà produrre una soluzione originale del problema. A tal fine può essere utile registrare il proprio parser sul wiki.

Esempio Parser P++ di Lanera-Menga-Tartarello

Esami 

Bacheca Appelli presso la segreteria Esse3 (colonna a destra, sezione Esami)

NB non ci sono propedeuticità ma l'esame è propedeutico ad altri esami del II anno (vedere sezione relativa nel manifesto sul sito del corso)

Modalità d'esame

  • In ogni appello, è prevista una prova scritta (60+ min) con domande ed esercizi ed una orale integrativa, durante la quale sarà possibile discutere l'eventuale elaborato (parser). In tal caso si richiede la presentazione della relativa documentazione (supp. cartaceo).
  • Sono ammessi alla prova orale dell'appello coloro che abbiano riportato un voto sufficiente (≥ 18) nella prova scritta. A discrezione del docente può essere concessa l'ammissione alla prova orale con riserva anche con votazione inferiore (purché non insufficiente)
Documenti
  • tesserino universitario (o altro doc. di riconoscimento)
    NB: Dato che la verbalizzazione richiede l'esplicita accettazione posticipata, il voto non verrà apposto anche sul vecchio libretto

Prenotazioni

Attraverso l'area studenti della segreteria Esse3
  • Prova scritta (indicata come prova parziale)
  • Prova orale con verbalizzazione
NB
  • si rammenta che, per ragioni organizzative, il servizio di prenotazione chiude qualche gg. prima della data della prova.
  • In caso di problemi, contattare il supporto di Esse3 ovvero il docente, di persona o per telefono, prima della chiusura indicata. In ogni caso, non vale come prenotazione il semplice invio di email
NB Si prega di fare un uso corretto della comunicazione via email; in particolare:
  1. indicare sempre nominativo e matricola
  2. specificare oggetti precisi e non generici, premettendo preferibilmente [LdP] per agevolare lo smistamento
  3. non dare per scontato che i messaggi, per il solo fatto di essere stati inviati, siano anche ricevuti e letti in tempo utile
  4. non usare questo canale per questioni formali/urgenti:
    • esso non è alternativo al ricevimento: specie per le problematiche legate agli esami
    • non porre problemi personali chiedendo deroghe rispetto alle modalità descritte in questa pagina

Diario

FINE CORSO

06/06 II prova in itinere [rinviata su richiesta degli studenti]

29/05 Paradigma Funzionale Computazione senza stato: espressioni e funzioni, ricorsione, riduzione, fondamenti, semantica. Valutazione: valori, sostituzione senza cattura, strategie (per valore, per nome, lazy). Programmazione: Ambiente Locale, interattività, tipi, pattern matching, oggetti infiniti, aspetti imperativi

28/05 Paradigma Object-Oriented: Polimorfismo e tipi generici Polimorfismo di sottotipo, generici in JAVA, Segnaposto ? (wildcard). Sottotipi: generici e array. Overriding covariante e controvariante. Supertipi e viste

26/05 Paradigma Object-Oriented: Nozioni fondamentali: incapsulamento, oggetti, classi, delega, ereditarietà, sottotipi, selezione dinamica dei metodi.

22/05 Strutture dati Equivalenza e compatibilità. Conversione: coercizione e cast. Polimorfismo: ad hoc, universale. di sottotipo. Tecniche per gestire dangling reference e garbage collection.
Astrazione dati: tipi astratti (ADT). Information hiding e incapsulamento. Contratti e specifica formale. Moduli e polimorfismo parametrico.

21/05 Strutture dati: tipi e sistemi di tipo: controlli. Tipi semplici: scalari, ordinali, enumerativi e intervallo. Tipi strutturati: Record/struct: varianti, union. Array. Insiemi. Puntatori. Tipi ricorsivi.

19/05 Astrazione sul controllo: astrazione funzionale: sottoprogrammi e modalità di passaggio parametri: per valore, riferimento, costante, risultato, valore-risultato, nome. Funzioni come parametri o valori di ritorno. Eccezioni.

16/05 JavaCC: analisi sintattica.. Regole di produzione. Dalla ricorsione all'iterazione. Punti di scelta. Lookahead globale, locale, sintattico, semantico Problemi. Esempi

14/05 Strutture di controllo: espressioni e loro valutazione. Notazioni: infissa, polacca, polacca inversa. Variabili. Comandi: effetti collaterali. Comandi per il flusso di controllo. Composizione. Salti. Condizionali. Iterazioni. Ricorsione. Ricorsione in coda.

12/05 Gestione della memoria: statica e dinamica. RDA per blocchi e sottoprogrammi. Liste libere singole e multiple. Implementazione: strutture dati per la gestione della mem. in regime di scope statico e dinamico.
JavaCC: analisi sintattica. Regole di produzione. Esempi.

07/05 Analisi sintattica: Parsing ricorsivo discendente: passaggio dalla grammatica al codice senza/con gestione degli errori.
Analisi semantica: grammatiche con attributi ed azioni semantiche. Ottimizzazione del codice

05/05 Analisi sintattica: Introduzione ai metodi di parsing. Gestione errori. Analisi discendente (depth-first e breadth-first). Analisi deterministica predittiva. Lookahead. Grammatiche LL(k). Parsing discendente guidato da tabella. Insiemi FIRST e FOLLOW con grammatiche (strong) LL(1). Fattorizzazione ed eliminazione della ricorsione sinistra.

30/04 Linguaggi liberi: Altre prop. di chiusura. Automi a pila (PDA). Condizioni di accettazione. Esempi di PDA. Equivalenza tra ling. liberi e riconosciuti da PDA. Forme normali delle grammatiche libere (CNF, NLR, GNF). Predicati decidibili. Algoritmo CYK

28/04 Linguaggi liberi: Alberi di Derivazione e Derivazioni Canoniche. Ambiguità. Principio di sostituzione. Pumping Lemma per Linguaggi Liberi. Esercizi. Proprietà di Chiusura rispetto all’Unione, Prodotto, Iterazione. Altre Proprietà di Chiusura.

23/04 I prova in itinere

10/04 Esercizi con JavaCC: costruzione di semplici token manager

09/04 JavaCC: analisi lessicale: Stati lessicali. Azioni. Esempi di utilizzo del token manager (e debug). Regole SPECIAL_TOKEN e MORE.

07/04 Nomi e Ambiente: Binding, ambienti, blocchi, visibilità (scope). Scope statico e dinamico.

03/04 Esercizi con JavaCC: costruzione di semplici token manager

02/04 JavaCC: introduzione e analisi lessicale: token, espressioni regolari estese, file di specifica e file in output. Token manager senza parser [javacc A.Lex.]

31/03 Linguaggi e loro traduzione: struttura dei compilatori Analisi lessicale introduzione, token, gestione errori. implementazione.

27/04 Proprietà dei linguaggi regolari: Predicatati decidibili. Teorema di Myhill-Nerode (enunciato).
Esercizi

20/04 Proprietà dei linguaggi regolari: Pumping Lemma per i ling. regolari. Algoritmi per la chiusura rispetto a: unione, prodotto, iterazione, complemento, intersezione. Altre prop. di chiusura

17/03 Linguaggi regolari: Teorema di Kleene. Algoritmi di trasformazione: grammatiche -- automi -- espr. regolari. Esercizi

13/03 Linguaggi regolari: Automi a stati finiti deterministici e non. Riconoscimento di stringhe. Linguaggio accettato. Classe dei ling. a stati finiti deterministici e non deterministici. Esempi. Teorema di equivalenza tra classi di linguaggi a stati finiti deterministici e non. Espressioni regolari e linguaggi regolari.

12/03 Introduzione ai linguaggi formali: Gerarchia di Chomsky: tipi di grammatiche e linguaggi. Teorema della gerarchia. Automi: schema, transizioni, computazioni. Determinismo. Tipologie.
Esercizi su Linguaggi e grammatiche

10/03 Introduzione ai linguaggi formali: Alfabeti e stringhe: prodotto, potenze e chiusure. Linguaggi formali e operazioni relative. Grammatiche generative: derivazioni, linguaggio generato.

03/03 Semantica operazionale (+ esempi) [approf. 2.1; blocco slide]
Fondamenti problemi di sem. statica. Funzioni parziali. Calcolabilità. Problema dell'halt. Funzioni e programmi

26/02 Descrizione dei ling. di programmazione: introduzione, grammatiche, EBNF, frasi, derivazione, alberi di derivazione, ambiguità. Compilazione: fasi.

24/02 Organizzazione del corso
Macchine astratte: Implementazione (hw,sw,fw). Interpretazione e compilazione. Gerarchia delle macchine astratte.

—=< INIZIO CORSO >=—
inizio pagina