La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902.

Presentazioni simili


Presentazione sul tema: "ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902."— Transcript della presentazione:

1 ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola:

2 2 1. Obiettivo Realizzare un interprete logico-aritmetico ispirato al linguaggio Scheme utilizzando Java.

3 3 ExAEI ( Extendible Arithmetic Expression Interpreter )

4 4 2. Analisi

5 5 Cosè un interprete: Automa in grado di eseguire le azioni richieste per valutare le frasi di un linguaggio L. Programma + L = descrizione automa Macchina universale che accetta in ingresso la descrizione di un automa e ne simula il comportamento.

6 6 1° livello di astrazione: repeat lettura di una frase S dal dispositivo di ingresso; if S appartiene L(G){ esegui S; return(risultato); } else segnala errore; forever

7 7 Requisiti Funzionali: 1.Riconoscimento delle frasi; 2. Valutazione di espressioni aritmetiche; 3.Contemplazione di diverse forme di valutazione; 4. Realizzazione di uninterfaccia grafica.

8 8 1. Riconoscimento delle frasi Analisi lessicale (Lexer) Analisi sintattica Analisi semantica ] (Parser) APT

9 9 Abstract Parse Tree (APT) Permette di aumentare la modularità dell interprete in quanto consente di separare la parte di analisi sintattica da quella semantica.

10 10 2. Valutazione delle espressioni Linterprete deve inoltre supportare: Sequenze di espressioni; Assegnamenti. Dopo il riconoscimento linput deve essere valutato. Interi, reali e operatori.

11 11 3. Diverse forme di valutazione Posso avere diverse forme di valutazione dellinput, quindi devo considerare: 1. Riscrittura in forma infissa; 2.Riscrittura in forma polacca postfissa; 3.Riscrittura in forma polacca prefissa; (continua …)

12 12 4.Calcolo del risultato; 3. Diverse forme di valutazione 5.Visualizzazione grafica dellAbstract Parse Tree (APT); 6.Generazione del codice per SM; 7.Generazione del codice per RM.

13 13 4. Realizzazione interfaccia grafica Questo passo è necessario per agevolare lutilizzo dellinterprete da parte dellutente.

14 14 3. Progetto

15 15 Scelta della grammatica Requisiti: Context Free; Non ambigua (notazione BNF) Espressa come gerarchia di classi (procedimento top – down)

16 16 Grammatica di riferimento (G) G = { VN, VT, S, P } ove: VT = insieme dei simboli terminali; S= scopo (start-symbol); P= insieme delle produzioni. VN = insieme dei meta-simboli non terminali (variabili);

17 17 P = { ::= ; | ::= {[*|/] } ::= [|-] |( )| ::= = ::= Lettera {Lettera| } ::= Decdigit {Decdigit} } ::= {[+|-] }|

18 18 Gerarchia di classi È immediato costruire un interprete. Metodologia funzionale: introduco una funzione (instanceof) che determina la classe a cui appartiene un oggetto attraverso un opportuno casting. Metodologia object oriented: introduco un metodo specializzato per ogni classe.

19 19 Gerarchia di classi Caso funzionale: è più facile introdurre nuove interpretazioni ma più oneroso introdurre nuove produzioni poiché occorre modificare il codice di tutte le funzioni di interpretazione per tenere conto delle nuove strutture. Caso object oriented: viceversa, in quanto occorre definire un metodo nuovo per ogni classe.

20 20 Gerarchia di classi Un linguaggio di programmazione è caratterizzato da una grammatica fissa e da molteplici interpretazioni, quindi la scelta ricade sul primo caso. Posso però conciliare le due metodologie con la scelta di un pattern di nome Visitor.

21 21 Pattern Visitor Una volta processato linput e ottenuto un APT devo poterlo analizzare. Pattern visitor : si propone di localizzare in un oggetto (il visitor, che ho chiamato SExpVisitor) la logica delle azioni che coinvolgono i componenti dellalbero. Realizza un protocollo di double dispatching.

22 22 Double dispatching 1. Si introduce un insieme di (classi) visitor, ciascuna delle quali dedicata alla realizzazione di una specifica funzionalità: InfixSExpVisitor DPNSExpVisitor RPNSExpVisitor (continua…) È adatto per strutture di dati che non cambiano sulle quali e necessario agire con politiche diverse.

23 23 Double Dispatching EvalSExpVisitor EvalAssignSExpVisitor GraphicsSExpVisitor GenStkMCodeSExpVisitor GenRegMCodeSExpVisitor

24 24 Double Dispatching 2.Considero la tassonomia di classi alla quale appartengono i componenti dellAPT che il visitor deve percorrere. Questi oggetti fanno parte della gerarchia SExp.

25 25 SExp ConsExp AtomSExp NilSExp SNumExp SIntNumExp DivExp SRealNumExp IdentSExp TimesExp IdenValSExp AssignSExp MinusExp SOpExp PlusExp EseqSExp

26 26 Double Dispatching 3.Si definiscono, per ciascun visitor, tante operazioni quante sono le classi della tassonomia dei nodi (del tipo visitxxx ); 4.Per ogni classe della struttura da visitare si definisce una operazione con signature: public void accept(GenericVisitor v); 5.Si definiscono le operazioni visitxxx in ciascuna delle classi visitor in modo da realizzare le funzioni desiderate.

27 27 Double Dispatching Riassumendo: Sia Tree la variabile che denota la struttura da visitare Sia ev la variabile che denota una specifica istanza di un particolare tipo di visitor

28 28 Double Dispatching l'invocazione Tree.accept(ev) provoca un primo dispatching in relazione al tipo di nodo referenziato da Tree e un secondo dispatching in relazione all invocazione ev.visitxxx(this) provocata dall'esecuzione dell'operazione accept.

29 29 Abstract Stack Machine Macchina astratta costituita da una memoria sequenziale per il codice, una per i dati e da uno stack, sul quale è possibile eseguire operazioni aritmetiche e che può ospitare indifferentemente sia numeri interi che reali.

30 30 Abstract Stack Machine Primitive: Accesso alla memoria: PUSH, POP, STORE Controllo di flusso: HALT, JMP Istruzioni aritmetiche: ADD, MUL, SUB, DIV

31 31 Register Machine È costituita da una memoria sequenziale per codice e dati, da una memoria gestita a stack e da due registri (denominati AX e BX) sui quali è in grado di compiere operazioni aritmetiche.

32 32 Register Machine Primitive: Trasferimento dati MOV Controllo di flusso: HALT, JMP Gestione dello Stack POP, PUSH Istruzioni aritmetiche: ADD, MUL, SUB, DIV

33 33 Interfaccia grafica Funzionalità richieste: Immissione input (area di testo); Valutazione input (tasto Eval); Cancellazione dellinput (tasto Call); Visualizzazione risultati (aree di testo); Visualizzazione msg di errore; Scelta dei tipi di valutazione (Checkbox);

34 34 4.Implementazione

35 35 Analizzatore Lessicale ( AEILexer ) java.io.StreamTokenizer Consente riconoscimento di identificatori e numeri interi e reali: nextToken() lexerSExpCurrToken Token rappresentati come oggetti della gerarchia SExp: SNumExp, SOpExp, IdentSExp

36 36 Analizzatore Sintattico ( AEIParser ) Restituisce un oggetto di tipo SExp che rappresenta lAPT della frase di input. Se la frase non appartiene alla grammatica specificata, solleva uneccezione ( AEIParserException ) che contiene una stringa che identifica il tipo di violazione verificata e un intero per indicarne il numero di riga.

37 37 Visitors implementati La modellazione del problema ha introdotto strutture ( consSExp e nilSExp ) che permettono di realizzare il concetto di lista e quindi di rendere disponibile una serie di operazioni primitive del Lisp sulle liste ( car, cdr, isNull, isEq, isAtom ). Anche se uso Java posso organizzare linterprete secondo la strutture di Scheme.

38 38 Visitors implementati ( Infix ) 1.infixSExpVisitor Riscrive unespressione in forma infissa. Visita dellAPT eseguita in ordine left- root-right. Risultati intermedi memorizzati in uno stack (istanza di java.util.Stack ). Risultato finale attraverso metodo val().

39 39 Visitors implementati ( DPN ) 2.DPNSExpVisitor Riscrive unespressione in forma polacca prefissa. Visita dellAPT eseguita in ordine root- left-right. Risultati intermedi memorizzati in uno stack. Risultato finale attraverso metodo val().

40 40 Visitors implementati ( RPN ) 3.RPNSExpVisitor Riscrive unespressione in forma polacca postfissa. Visita dellAPT eseguita in post-ordine left-right-root. Risultati intermedi memorizzati in uno stack. Risultato finale attraverso metodo val().

41 41 Visitors implementati ( Eval ) 4.EvalSExpVisitor Va oltre la semplice riscrittura. Tabella hash per rappresentare lenvironment (binding), istanza di java.util.HashTable. Visita dellAPT eseguita in post-ordine left-right-root Differenza tra correttezza sintattica e semantica ( SymbolNotDefinedException )

42 42 Visitors implementati ( Graphics ) 5.GraphicsSExpVisitor Utilizzo di classi java.Swing.JTree Visita dellAPT eseguita in post-ordine left-right-root Modello finale attraverso il metodo val()

43 43 Visitors implementati ( SM ) 6.GenStkMCodeSExpVisitor Costanti numeriche ( PUSH ) Variabili: right-value ( ), left-value ( ). Visita dellAPT eseguita in post-ordine left-right-root HALT per terminare lesecuzione della SM.

44 44 Visitors implementati ( RM ) 7.GenRegMCodeSExpVisitor Visita dellAPT eseguita in post-ordine left-right-root Utilizzo di due registri ausiliari. Stack usato solo per i risultati intermedi. HALT Per termina lesecuzione della RM.

45 Interfaccia grafica

46 * (-4) 6 * (3 + 4) / a=2; b=5; c=3; 2 / 3.5 * (a-b*(c+3)) 5. Verifiche

47 47 Verifiche:

48 48 ExALEI ( Extendible Arithmetic Logic Expression Interpreter )

49 49 2. Analisi

50 50 Differenze Necessità di definire una grammatica più completa: – Nuovi operatori:, =, and, or, not, if…then…else; – Nuovo tipo di espressione: boolean (true, false);

51 51 3. Progetto

52 52 Grammatica di riferimento (G) G = { VN, VT, S, P } ove: VT = insieme dei simboli terminali; S= scopo (start-symbol); P= insieme delle produzioni. VN = insieme dei meta-simboli non terminali (variabili);

53 53 P = { ::= {; } ::= | ? : ::= { or } ::= { and } ::= { == } ::= { [ | = ] } ::= {[+|-] } |...

54 54... ::= {[*|/] } ::= [not] |[|-] | ( ) | | ::= true | false (ignoring case) ::= = ::= Lettera {Lettera | } ::= Decdigit {Decdigit} }

55 55 Gerarchia SExp Nuove classi: BoolSExpElseSExpSExpNotGreatSExp AndSExpEqualSExpNotLessSExp OrSExpGreaterSExpNotSExp CondSExpLessSExp

56 56 Nuove istruzioni: Controllo di Flusso Logiche And Or Not Stack Machine (SM)

57 57 Nuove istruzioni: Logiche And Or Not Controllo di Flusso Register Machine (RM)

58 58 4.Implementazione

59 59 Nuovi operatori Unario: come se fosse binario con un argomento nullo; Ternario: attraverso due nodi e tre foglie.

60 60 Visitors realizzati Aggiunta dei metodi necessari ai nuovi operatori. LInfixSExpVisitor (not) LDPNSExpVisitor (operatore ternario) LRPNSExpVisitor (operatore ternario) LEvalAssignSExpVisitor ( verifica incompatibilità operando-operatore, trattamento delloperatore ternario alterazione dellordine di visita left-root-right)

61 61 SM e RM Rappresentazione dei booleani: true=1 false=0 Operatori di confronto valutati così: Sottrazione di op1 con op2 ; Salto condizionato in base al valore del resto.

62 * (-4) 6 * (3 + 4) / a=2; b=5; c=3; 2 / 3.5 * (a-b*(c+3)) true or false 5 >=3 ? x=t : x=f 5. Verifiche

63 63 Verifiche:

64 64 Fine


Scaricare ppt "ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902."

Presentazioni simili


Annunci Google