Questo repository contiene i testi dei progetti d'esame (e le relative informazioni accessorie) dell'insegnamento di Linguaggi e traduttori dell'Università degli Studi di Milano.
Di seguito trovate i progetti, elencati per anno accademico; le informazioni circa le modalità d'esame sono disponibili sul sito del corso.
Il codice deve essere consegnato tramite un apposito repository su GitHub creato dal docente a seguito dell'incontro in cui viene concordato il progetto . Gli studenti sono incoraggiati ad effettuare frequenti commit periodici per testimoniare il processo di sviluppo e sono altresì incoraggiati ad effettuare (anche con una frequenza ridotta rispetto ai commit) dei push periodici al fine di informare il docente dello stato di avanzamento del progetto (cosa che rende possibili, anche se non garantite, delle eventuali code review del codice da parte del docente).
Al termine del lavoro, con congruo anticipo rispetto alla data del colloquio,
lo studente effettua un commit con messaggio CONSEGNA FINALE
che segna il
termine del processo di sviluppo e l'inizio della valutazione definitiva da
parte del docente.
Chi non conosce o non è in grado di usare git
e/o GitHub può documentarsi per
tempo in rete, ad esempio seguendo la guida Git
Handbook ed usando un
client grafico come GitHub Desktop. In nessun
caso sono previste altre modalità di consegna.
Non è richiesta la stesura di una relazione; per questa ragione è caldamente suggerito che il codice contenga un minimo di documentazione atta a guidare il docente nella comprensione della sua architettura, delle scelte progettuali ed implementative e del comportamento delle sue varie parti. Si consiglia di redigere tale documentazione sotto forma di commenti nel codice, usando eventualmente (solo se si è in grado e senza perdere tempo) uno degli strumenti di documentazione automatica disponibili per il linguaggio scelto.
Il codice deve consentire un minimo di testing, se non altro sotto forma di test unitari e di accettazione; qualora il testo del progetto indichi esplicitamente alcuni test, è comunque necessario che lo studente sviluppi ulteriori test secondo le tecniche e usando gli strumenti che gli sono più familiari.
- versione preliminare Luppolo, un interprete/compilatore per un semplice computer algebra system.
Un elenco di possibili argomenti per esami di questo tipo è:
- Implementare l'algoritmo di Earley (rif. Marpa e PT),
- Implementare gli algoritmi LR(1), SLR(1) e LALR(1) (rif. PT),
- Implementare gli algoritmi descritti in: "Parsing Expressions by Recursive Descent",
- Implementare gli algoritmi descritti in: "Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...)"