Linguaggi e modelli computazionali LS Manni Tiziano

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
Linguaggi algoritmici
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Analizzatori Lessicali con JLex
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Generazione di Codice Intermedio
Algoritmi e Programmazione
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Programmazione Procedurale in Linguaggio C++
Semantiche dei linguaggi di programmazione
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione lll
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Unità Didattica 2 I Linguaggi di Programmazione
memoria gestita staticamente:
Le funzioni.
Espressioni condizionali
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Gli algoritmi.
Java base II: Strutture di Controllo
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
ANTLR V.3 Renzi Alberto.
Università degli Studi di Bari Laurea in Chimica Di spense di Informatica - Dott. F. Mavelli Programmare in Matlab Funzioni di Libreria Funzioni definite.
Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti.
Linguaggi e Modelli Computazionali LS - Prof E.Denti
CineMan Linguaggio per la descrizione della programmazione di cinema
Corso di Laurea Specialistica in Ingegneria Informatica Itinerari aerei Progetto per lesame di Linguaggi e Modelli Computazionali LS realizzato da Stefano.
PROGRAMMARE IN C Un ambiente di sviluppo `e un software che serve per scrivere ed eseguire programmi. Generalmente integra almeno 3 funzionalita’: Editor:
CODIFICA Da flow-chart a C++.
Gianfranco Zampolini Progetto per il corso di: Linguaggi e Modelli Computazionali LS EM Linguaggio per la Descrizione di un Evento Musicale.
Linguaggi e modelli computazionali LS
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Corso di Laurea Specialistica in Ingegneria Informatica Previsione dei Consumi Elettrici = Progetto per lesame di Linguaggi e Modelli Computazionali LS.
Attività progettuale in Linguaggi e Modelli Computazionali M
Tablabla Progetto di Valent Cristina
SQL File Manager un nuovo modo di gestire il filesystem….
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
ECDL Patente europea del computer
ATTIVITÀ PROGETTUALE LINGUAGGI E MODELLI COMPUTAZIONALI L-M Un linguaggio per la descrizione di coreografie giocabili STUDENTE: BACCHILEGA SIMONE A.A 2013/2014.
PROGRAMMAZIONE IN LOGO
Anno accademico Le istruzioni di controllo in C.
Lezione 3 Struttura lessicale del linguaggio
Introduzione a Javascript
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
DRAUGHTS Linguaggi e Modelli Computazionali LS Linguaggio e interprete per effettuare una partita di dama inglese contro un’intelligenza artificiale Progetto.
Trading EToro Un linguaggio per descrivere e gestire operazioni di borsa Progetto di Linguaggi e Modelli Computazionali LS Prof. Enrico Denti Mancini Laura.
Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare.
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Concetti Fondamentali sulla Programmazione
Eye Computer Sistema per l'interazione con un computer dotato di controllo oculare Linguaggi e modelli computazionali LS Realizzato da: Ciavarella Primiano.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Le modalità attraverso le quali gli utenti interagiscono con il computer A cura di Eleonora Bilotta.
Transcript della presentazione:

Linguaggi e modelli computazionali LS Manni Tiziano 0000279932 SimMouse Linguaggi e modelli computazionali LS Manni Tiziano 0000279932

OBIETTIVO Realizzare un’applicazione che permetta di descrivere movimenti ed azioni del mouse (click) e della tastiera (pressione tasti) in modo da poterli automatizzare. Introdurre inoltre: costrutti per il controllo del flusso di esecuzione(repeat, for, if else) concetti di variabile, funzione e scope di visibilità.

Possibilità di collocare frammenti di codice in opportune procedure OBIETTIVO Vediamo quindi un esempio del linguaggio che si vuole ottenere: var i; fun Esempio fun Run { write “simulazione tasti” + i; for (i=0; i<10; i=i+1) doubleClick 50*i+10 300; Esempio; clickDx 10 10; clickSx 40 50; } Possibilità di collocare frammenti di codice in opportune procedure

LA GRAMMATICA VN = <PROG, BLOCK, STATEMENT, OPERATION, ASSIGN, DICVAR, WAIT, MOUSE, KEYBOARD, FUNCTION, EXP, TERM, FACTOR, COND, CONTROL, FOR, REPEAT, IF>. VT = <+, -, *, /, <, >, <=, >=, ==, !=, =, id, idfun, num, string, for, repeat, if, else, doubleClick, clickDx, clickSx, clickSxUp, clickSxDw>. S = <PROG> Definiamo le regole di produzione del parser. Le funzioni iniziano per lettera maiuscola Le variabili iniziano per lettera minuscola

LA GRAMMATICA <PROG> ::= { fun idfun <BLOCK> | <DICVAR> ';' } fun Run <BLOCK> { fun idfun <BLOCK> | <DICVAR> ';' }; <BLOCK> ::= '{' { <STATEMENT> } '}'; <STATEMENT> ::= <OPERATION> ';' | <CONTROL> ; < OPERATION> ::= <ASSIGN> | <DICVAR> | <WAIT> | <MOUSE> | <KEYBOARD> | <FUNCTION> ; <CONTROL>::= for <FOR> | repeat <REPEAT> | if <IF>; Self-Embedding Funzione di partenza.

LA GRAMMATICA <FUNCTION> ::= <idfun>; <DICVAR> ::= var id [ assign <EXP> ]; <ASSIGN>::= id assign <EXP>; Variabili LOOSELY TYPED L’assegnamento non è interpretato come operatore. Può cambiare il tipo della variabile.

LA GRAMMATICA <EXP> ::= <TERM> { + <TERM> | - <TERM>}; <TERM> ::= <FACTOR> { * <FACTOR> | / <FACTOR>}; <FACTOR> ::= number | string | id | '(' <EXP> ')'; <COND>::= <EXP> ( < | > | <= | >= | == | !=) <EXP>; Possibilità di definire espressioni anche fra tipo diversi. Operazione meno prioritaria delle altre operazioni matematiche

ISTRUZIONI COMANDO <MOUSE> ::= (doubleClick | clickSx | clickDx | clickSxUp | clickSxDw) <EXP> ' ' <EXP>; <KEYBOARD> ::= write <EXP>; <WAIT> ::= wait <EXP>; Coordinate di azione espresse in pixel. Stringa da simulare Attesa (espressa in secondi)

ISTRUZIONI CONTROL-FLOW <FOR> ::= '(' <ASSIGN> ';' <COND> ';' <ASSIGN> ')' <BLOCK>; <REPEAT> ::= '(' <COND> ')' <BLOCK>; <IF> ::= '(' <COND> ')' <BLOCK> [ else <BLOCK> ]; Istruzione di inizializzazione Blocco di istruzioni Istruzione di modifica Condizione di controllo Blocco da eseguire con condizione vera … nel caso sia falsa

GRAMMATICA: PROPRIETA’ La grammatica ottenuta è di tipo 2 … … e risulta LL(1) in quanto per qualunque simbolo non terminale della grammatica gli starter symbol sono disgiunti. → il parser sa sempre quale produzione usare.

ANALISI LESSICALE Per l’analisi lessicale del programma scritto dall’utente sono stati realizzati due componenti: Lo scanner: scorre la stringa (che rappresenta il programma scritto dall’utente) e lo separa in sotto-stringhe in base ad una lista di delimitatori. Il lexer che riceve dallo scanner le varie sotto-stringhe, le esamina assegnando una corrispondente categoria lessicale: costruisce quindi una serie di oggetti “Token” passati poi all’analizzatore sintattico.

ANALISI SINTATTICA Essendo la grammatica LL(1), risulta possibile utilizzare l’analisi ricorsiva discendente per analizzare le frasi passate in input: Si introducono tante funzioni quanti i simboli non terminali della grammatica. Si fa sì che ogni funzione riconosca il sotto-linguaggio generato da ciascun simbolo non terminale. Risulta quindi semplice effettuare chiamate ricorsive di funzioni.

ANALISI SINTATTICA L’analisi sintattica viene svolta dal componente Parser: esso ottiene l’istanza della classe Lexer e la utilizza per ottenere i vari Token di cui la frase da analizzare è costituita. Ricevuto in ingresso il primo Token di una frase, il parser(essendo la grammatica LL(1)) è in grado di richiamare la funzione corrispondente che analizzerà la correttezza dei Token successivi. In caso di errore il Parser provvede a lanciare una nuova istanza della classe ParserException.

ANALISI SINTATTICA

ANALISI SEMANTICA I visitor creati sono due, ed entrambi implementano ovviamente la comune classe astratta “Visitor”: ExecuteVisitor: ha il compito di interpretare il programma scritto da utente e simulare le azioni descritte dal programma stesso. TreeViewVisitor: ha il compito di disegnare graficamente l’albero restituito dal parser.

ANALISI SEMANTICA Il visitor ExecuteVisitor provvede inoltre a lanciare un’opportuna eccezione “RunTimeException” nel caso in cui trovi frasi senza senso nel programma: Riferimenti a variabili non esistenti Tipi non compatibili. Utilizzo di variabili non inizializzate. Operatori non compatibili con gli argomenti passati. Richiamo di funzioni non definite. Per individuare errori a RunTime è stata introdotta nell’ExecuteVisitor una modalità di simulazione (valutazione delle variabili, espressioni e funzioni).

L’APPLICAZIONE L’applicazione è stata suddivisa in due thread: Un flusso si occupa dell’interfaccia grafica, L’altro flusso esegue l’ExecuteVisitor. → l’utente ha la possibilità di interrompere l’esecuzione in presenza ad esempio di errori (esempio: loop infiniti, ecc). Inoltre è stato implementato un sistema di “generazione di codice” per aiutare la programmazione: Recupero della posizione corrente del mouse e di eventuali tasti premuti, Recupero del codice corrispondente ad alcuni tasti speciali della tastiera (esempio: tab, enter, ctrl, alt, ecc).

L’APPLICAZIONE Scanner Lexer Parser Programma TreeViewVisitor ExecuteVisitor

SVILUPPI FUTURI Introduzione di comandi per simulare la pressione di combinazioni di tasti della tastiera (esempio ctrl + … , ctrl+alt+… , ecc. ). Esecuzione di funzioni con passaggio di dati. Introduzione di comandi per interagire con l’utente durante l’esecuzione.