Buona conoscenza delle nozioni fondamentali di informatica e relative ai linguaggi di programmazione.
Presentare le tecniche per la definizione dei linguaggi formali e mostrare gli algoritmi di riconoscimento dei linguaggi.
Presentazione degli strumenti freeware per la generazione automatica dei compilatori.
Lo studente acquisirà la capacità di progettare piccoli linguaggi artificiali e realizzare il traduttore.
Teoria dei linguaggi.
Operatori sui linguaggi.
Espressioni regolari: derivazione del linguaggio, riconoscimento mediante automi a stati finiti-
Sintassi dei linguaggi: grammatiche BNF, proprietà.
Famiglie di linguaggi e tecniche di riconoscimento (parsing): discendente (LL(1)) e ascendente (LR(0), LALR(1), LR(1)).
Semantica dei linguaggi: modello delle grammatiche ad attributi e modalità di valutazione semantica.
La macchina virtuale di Java e il byte code.
Lezioni frontali, esercizi.
Sedute in laboratorio.
Esame scritto obbligatorio.
Progetto facoltativo ma consigliato.
Good knowledge of fundamentals of Information technology and programming languages.
Introducing techniques to describe formal languages and algorithms to recognizes artificial languages.
Presenting freeware tools to generate language compilers.
Students will get the ability to design simple artificial languages and develop the translator.
Language theory.
Operators on languages.
Regular expressions: derivation of language, recognition by means of finite state automata.
Syntax of languages: BNF grammars, properties.
Families of languages and parsing techniques: descending (LL(1)) and ascending (LR(0), LALR(1), LR(1)).
Semantics of languages: attribute grammars model and semantic evaluation methods.
The Java virtual machin and the byte code.
Lectures and exercises.
Session in the lab.
Mandatory written exam.
Optional (but strongly suggested) project work.