exalei ( extendible arithmetic logic expression interpreter ) autore: cremonini davide matricola:...
TRANSCRIPT
![Page 1: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/1.jpg)
ExALEIExALEI
( ( ExExtendible tendible AArithmetic rithmetic LLogic ogic EExpression xpression IInterpreter ) nterpreter )
Autore: Cremonini Davide Matricola: 2148054902
![Page 2: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/2.jpg)
2
1. Obiettivo1. Obiettivo
Realizzare un interprete logico-aritmetico ispirato al linguaggio Scheme utilizzando Java.
![Page 3: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/3.jpg)
3
ExAEIExAEI
( ( ExExtendible tendible AArithmetic rithmetic EExpression xpression IInterpreter ) nterpreter )
![Page 4: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/4.jpg)
4
2. Analisi2. Analisi
![Page 5: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/5.jpg)
5
Cos’è un interprete: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.
![Page 6: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/6.jpg)
6
1° livello di astrazione:1° livello di astrazione:
repeatlettura di una frase S dal dispositivo di ingresso;if S appartiene L(G){
esegui S;return(risultato);
} else
segnala errore;forever
![Page 7: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/7.jpg)
7
Requisiti Funzionali:Requisiti Funzionali:
1. Riconoscimento delle frasi;
2. Valutazione di espressioni aritmetiche;
3. Contemplazione di diverse forme di valutazione;
4. Realizzazione di un’interfaccia grafica.
![Page 8: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/8.jpg)
8
1.1. Riconoscimento delle frasiRiconoscimento delle frasi
Analisi lessicale (Lexer)
Analisi sintattica
Analisi semantica] (Parser)
APT
![Page 9: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/9.jpg)
9
Abstract Parse Tree (APT)Abstract Parse Tree (APT)
Permette di aumentare la modularità dell’ interprete in quanto consente di separare la parte di analisi sintattica da quella semantica.
![Page 10: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/10.jpg)
10
2. Valutazione delle espressioni2. Valutazione delle espressioni
L’interprete deve inoltre supportare: Sequenze di espressioni; Assegnamenti.
Dopo il riconoscimento l’input deve essere valutato.
Interi, reali e operatori.
![Page 11: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/11.jpg)
11
3. Diverse forme di valutazione3. Diverse forme di valutazione
Posso avere diverse forme di valutazione dell’input, quindi devo considerare:
1. Riscrittura in forma infissa;
2. Riscrittura in forma polacca postfissa;
3. Riscrittura in forma polacca prefissa;(continua …)
![Page 12: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/12.jpg)
12
4. Calcolo del risultato;
3. Diverse forme di valutazione3. Diverse forme di valutazione
5. Visualizzazione grafica dell’Abstract Parse Tree (APT);
6. Generazione del codice per SM;
7. Generazione del codice per RM.
![Page 13: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/13.jpg)
13
4. Realizzazione interfaccia grafica4. Realizzazione interfaccia grafica
Questo passo è necessario per agevolare l’utilizzo dell’interprete da parte dell’utente.
![Page 14: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/14.jpg)
14
3. Progetto3. Progetto
![Page 15: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/15.jpg)
15
Scelta della grammaticaScelta della grammatica
Requisiti:
Context Free;
Non ambigua (notazione BNF)
Espressa come gerarchia di classi (procedimento top – down)
![Page 16: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/16.jpg)
16
Grammatica di riferimento (G)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);
![Page 17: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/17.jpg)
17
P = {
<SEQEXP>::= <EXP>;<EXP>|<EXP>
<TERM>::= <FACTOR>{[*|/]<FACTOR>}
<FACTOR>::= [|-]<NUMBER>|(<EXP>)|<IDENT>
<ASSIGN>::= <IDENT> = <EXP>
<IDENT>::= Lettera {Lettera|<IDENT>}
<NUMBER>::= Decdigit {Decdigit}
}
<EXP>::= <TERM>{[+|-]<TERM>}|<ASSIGN>
![Page 18: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/18.jpg)
18
Gerarchia di classiGerarchia 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.
![Page 19: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/19.jpg)
19
Gerarchia di classiGerarchia 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.
![Page 20: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/20.jpg)
20
Gerarchia di classiGerarchia 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.
![Page 21: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/21.jpg)
21
Pattern VisitorPattern Visitor
Una volta processato l’input 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 dell’albero.
Realizza un protocollo di double dispatching.
![Page 22: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/22.jpg)
22
Double dispatchingDouble 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.
![Page 23: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/23.jpg)
23
Double DispatchingDouble Dispatching
EvalSExpVisitor EvalAssignSExpVisitor GraphicsSExpVisitor GenStkMCodeSExpVisitor GenRegMCodeSExpVisitor
![Page 24: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/24.jpg)
24
Double DispatchingDouble Dispatching
2. Considero la tassonomia di classi alla quale appartengono i componenti dell’APT che il visitor deve percorrere.
Questi oggetti fanno parte della gerarchia SExp.
![Page 25: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/25.jpg)
25
SExp
ConsExp
AtomSExp
NilSExp
SNumExp
SIntNumExp
DivExp
SRealNumExp
IdentSExp
TimesExp
IdenValSExp
AssignSExp
MinusExp
SOpExp
PlusExp
EseqSExp
![Page 26: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/26.jpg)
26
Double DispatchingDouble 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.
![Page 27: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/27.jpg)
27
Double DispatchingDouble 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
![Page 28: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/28.jpg)
28
Double DispatchingDouble 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.
![Page 29: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/29.jpg)
29
Abstract Stack Machine 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.
![Page 30: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/30.jpg)
30
Abstract Stack MachineAbstract Stack Machine
Primitive:Accesso alla memoria:
PUSH, POP, STORE Controllo di flusso:
HALT, JMP Istruzioni aritmetiche:
ADD, MUL, SUB, DIV
![Page 31: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/31.jpg)
31
Register MachineRegister 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.
![Page 32: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/32.jpg)
32
Register MachineRegister Machine
Primitive:Trasferimento dati MOV
Controllo di flusso: HALT, JMP
Gestione dello Stack POP, PUSH
Istruzioni aritmetiche: ADD, MUL, SUB,
DIV
![Page 33: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/33.jpg)
33
Interfaccia graficaInterfaccia graficaFunzionalità richieste:Immissione input (area di testo);
Valutazione input (tasto Eval); Cancellazione dell’input (tasto Call);
Visualizzazione risultati (aree di testo);
Visualizzazione msg di errore;
Scelta dei tipi di valutazione (Checkbox);
![Page 34: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/34.jpg)
34
4.4. ImplementazioneImplementazione
![Page 35: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/35.jpg)
35
AnalizzatoreAnalizzatore LessicaleLessicale ( (AEILexerAEILexer)) java.io.StreamTokenizer Consente riconoscimento di identificatori
e numeri interi e reali: nextToken() lexerSExpCurrToken
Token rappresentati come oggetti della gerarchia SExp: SNumExp, SOpExp, IdentSExp
![Page 36: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/36.jpg)
36
AnalizzatoreAnalizzatore SintatticoSintattico ( (AEIParserAEIParser))
Restituisce un oggetto di tipo SExp che rappresenta l’APT della frase di input.
Se la frase non appartiene alla grammatica specificata, solleva un’eccezione (AEIParserException) che contiene una stringa che identifica il tipo di violazione verificata e un intero per indicarne il numero di riga.
![Page 37: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/37.jpg)
37
Visitors implementatiVisitors 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 l’interprete secondo la strutture di Scheme.
![Page 38: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/38.jpg)
38
Visitors implementati (Visitors implementati (InfixInfix))
1. infixSExpVisitor Riscrive un’espressione in forma infissa.
Visita dell’APT eseguita in ordine left-root-right.
Risultati intermedi memorizzati in uno stack (istanza di java.util.Stack).
Risultato finale attraverso metodo val().
![Page 39: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/39.jpg)
39
Visitors implementati (Visitors implementati (DPNDPN))
2. DPNSExpVisitor Riscrive un’espressione in forma polacca
prefissa. Visita dell’APT eseguita in ordine root-
left-right. Risultati intermedi memorizzati in uno
stack.
Risultato finale attraverso metodo val().
![Page 40: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/40.jpg)
40
Visitors implementati (Visitors implementati (RPNRPN))
3. RPNSExpVisitor Riscrive un’espressione in forma polacca
postfissa. Visita dell’APT eseguita in post-ordine
left-right-root. Risultati intermedi memorizzati in uno
stack. Risultato finale attraverso metodo val().
![Page 41: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/41.jpg)
41
Visitors implementati (Visitors implementati (EvalEval))
4. EvalSExpVisitor Va oltre la semplice riscrittura.
Tabella hash per rappresentare l’environment (binding), istanza di java.util.HashTable.
Visita dell’APT eseguita in post-ordine left-right-root
Differenza tra correttezza sintattica e semantica (SymbolNotDefinedException)
![Page 42: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/42.jpg)
42
Visitors implementati (Visitors implementati (GraphicsGraphics))
5. GraphicsSExpVisitor
Utilizzo di classi java.Swing.JTree Visita dell’APT eseguita in post-ordine
left-right-root Modello finale attraverso il metodo val()
![Page 43: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/43.jpg)
43
Visitors implementati (Visitors implementati (SMSM))
6. GenStkMCodeSExpVisitor
Costanti numeriche (PUSH) Variabili: right-value (PUSH @<addr>),
left-value (STORE @<addr>).
Visita dell’APT eseguita in post-ordine left-right-root
JMP @<addr> HALT per terminare l’esecuzione della SM.
![Page 44: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/44.jpg)
44
Visitors implementati (Visitors implementati (RMRM))
7. GenRegMCodeSExpVisitor Visita dell’APT eseguita in post-ordine
left-right-root Utilizzo di due registri ausiliari.
Stack usato solo per i risultati intermedi.
HALT Per termina l’esecuzione della RM.
![Page 45: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/45.jpg)
Interfaccia graficaInterfaccia grafica
![Page 46: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/46.jpg)
46
2 + 3 * 5.0 + (-4)6 * (3 + 4) / 2.5 + 4a=2; b=5; c=3; 2 / 3.5 * (a-b*(c+3))
5. Verifiche5. Verifiche
![Page 47: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/47.jpg)
47
Verifiche:Verifiche:
![Page 48: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/48.jpg)
48
ExALEIExALEI
( ( ExExtendible tendible AArithmetic rithmetic LLogic ogic EExpression xpression IInterpreter ) nterpreter )
![Page 49: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/49.jpg)
49
2. Analisi2. Analisi
![Page 50: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/50.jpg)
50
DifferenzeDifferenze
Necessità di definire una grammatica più completa:
– Nuovi operatori: <, >, <=, >=, and, or, not, if…then…else;
– Nuovo tipo di espressione: boolean (true, false);
![Page 51: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/51.jpg)
51
3. Progetto3. Progetto
![Page 52: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/52.jpg)
52
Grammatica di riferimento (G)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);
![Page 53: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/53.jpg)
53
P = {
<SEQEXP>::= <CONDEXP> {;<CONDEXP>}
<CONDEXP>::= <OREXP> |
<OREXP> ? <CONDEXP> : <CONDEXP>
<OREXP>::= <ANDEXP> { or <ANDEXP> }
<ANDEXP>::= <EQEXP> { and <EQEXP> }
<EQEXP>::= <RELEXP> { == <RELEXP> }
<RELEXP>::= <EXP>
{ [ < | > | <= | >= ] <EXP>}
<EXP>::= <TERM>{[+|-]<TERM>} | <ASSIGN>
...
![Page 54: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/54.jpg)
54
...
<TERM> ::= <FACTOR>{[*|/]<FACTOR>} <FACTOR> ::= [not]<FACTOR>|[|-]<NUMBER>
| (<EXP>) | <IDENT> | <BOOL>
<BOOL>::= true | false (ignoring case)
<ASSIGN>::= <IDENT> = <EXP>
<IDENT>::= Lettera {Lettera | <IDENT>}
<NUMBER>::= Decdigit {Decdigit}
}
![Page 55: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/55.jpg)
55
Gerarchia SExpGerarchia SExp
Nuove classi:
BoolSExp ElseSExpSExp NotGreatSExp
AndSExp EqualSExp NotLessSExp
OrSExp GreaterSExp NotSExp
CondSExp LessSExp
![Page 56: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/56.jpg)
56
Nuove istruzioni:
Controllo di Flusso
JMPNZ @<addr>
JMPLT @<addr>
JMPGT @<addr>
JMPLE @<addr>
JMPGE @<addr>
Logiche
And
Or
Not
Stack Machine (SM)Stack Machine (SM)
![Page 57: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/57.jpg)
57
Nuove istruzioni:
Logiche
And
Or
Not
Controllo di Flusso
JMPZ @<addr> JMPGE @<addr>
JMPNZ @<addr> JMPLT @<addr>
JMPLE @<addr> JMPGT @<addr>
Register Machine (RM)Register Machine (RM)
![Page 58: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/58.jpg)
58
4.4. ImplementazioneImplementazione
![Page 59: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/59.jpg)
59
Nuovi operatoriNuovi operatori
Unario : come se fosse binario con un argomento nullo;
Ternario: attraverso due nodi e tre foglie.
![Page 60: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/60.jpg)
60
Visitors realizzatiVisitors realizzati
Aggiunta dei metodi necessari ai nuovi operatori. LInfixSExpVisitor (not)
LDPNSExpVisitor (operatore ternario)
LRPNSExpVisitor (operatore ternario)
LEvalAssignSExpVisitor ( verifica incompatibilità operando-operatore, trattamento dell’operatore ternario alterazione dell’ordine di visita left-root-right)
![Page 61: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/61.jpg)
61
SM e RMSM 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.
![Page 62: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/62.jpg)
62
2 + 3 * 5.0 + (-4)6 * (3 + 4) / 2.5 + 4a=2; b=5; c=3; 2 / 3.5 * (a-b*(c+3))true or false 5 >=3 ? x=t : x=f
5. Verifiche5. Verifiche
![Page 63: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/63.jpg)
63
Verifiche:Verifiche:
![Page 64: ExALEI ( Extendible Arithmetic Logic Expression Interpreter ) Autore: Cremonini Davide Matricola: 2148054902](https://reader035.vdocuments.us/reader035/viewer/2022062701/5542eb5d497959361e8ccb6a/html5/thumbnails/64.jpg)
64
Fine