La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Linguaggi e modelli computazionali LS Manni Tiziano 0000279932.

Presentazioni simili


Presentazione sul tema: "Linguaggi e modelli computazionali LS Manni Tiziano 0000279932."— Transcript della presentazione:

1 Linguaggi e modelli computazionali LS Manni Tiziano

2 Realizzare unapplicazione 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à.

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

4 VN =. VT =, =, ==, !=, =, id, idfun, num, string, for, repeat, if, else, doubleClick, clickDx, clickSx, clickSxUp, clickSxDw>. S = Definiamo le regole di produzione del parser. Le variabili iniziano per lettera minuscola Le funzioni iniziano per lettera maiuscola

5 1. ::= { fun idfun | ';' } fun Run { fun idfun | ';' }; 2. ::= '{' { } '}'; 3. ::= ';' | ; 4. ::= | | | | | ; 5. ::= for | repeat | if ; Funzione di partenza. Funzione di partenza. Self-Embedding

6 6. ::= ; 7. ::= var id [ assign ]; 8. ::= id assign ; Variabili LOOSELY TYPED Variabili LOOSELY TYPED Può cambiare il tipo della variabile. Lassegnamento non è interpretato come operatore. Lassegnamento non è interpretato come operatore.

7 10. ::= { + | - }; 11. ::= { * | / }; 12. ::= number | string | id | '(' ')'; 13. ::= ( | = | == | !=) ; Operazione meno prioritaria delle altre operazioni matematiche Operazione meno prioritaria delle altre operazioni matematiche Possibilità di definire espressioni anche fra tipo diversi. Possibilità di definire espressioni anche fra tipo diversi.

8 14. ::= (doubleClick | clickSx | clickDx | clickSxUp | clickSxDw) ' ' ; 15. ::= write ; 16. ::= wait ; Coordinate di azione espresse in pixel. Coordinate di azione espresse in pixel. Stringa da simulare Stringa da simulare Attesa (espressa in secondi) Attesa (espressa in secondi)

9 16. ::= '(' ';' ';' ')' ; 17. ::= '(' ')' ; 18. ::= '(' ')' [ else ]; Condizione di controllo Istruzione di modifica Istruzione di inizializzazione Blocco di istruzioni Blocco da eseguire con condizione vera … nel caso sia falsa

10 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.

11 Per lanalisi lessicale del programma scritto dallutente sono stati realizzati due componenti: Lo scanner: scorre la stringa (che rappresenta il programma scritto dallutente) 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 allanalizzatore sintattico.

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

13 Lanalisi sintattica viene svolta dal componente Parser: esso ottiene listanza 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.

14

15 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 lalbero restituito dal parser.

16 Il visitor ExecuteVisitor provvede inoltre a lanciare unopportuna 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 nellExecuteVisitor una modalità di simulazione (valutazione delle variabili, espressioni e funzioni).

17 Lapplicazione è stata suddivisa in due thread: Un flusso si occupa dellinterfaccia grafica, Laltro flusso esegue lExecuteVisitor. lutente ha la possibilità di interrompere lesecuzione 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).

18 Scanner Lexer Parser TreeViewVisitor ExecuteVisitor Programma

19 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 lutente durante lesecuzione.


Scaricare ppt "Linguaggi e modelli computazionali LS Manni Tiziano 0000279932."

Presentazioni simili


Annunci Google