-
Notifications
You must be signed in to change notification settings - Fork 0
girolamo-giordano/toycompiler
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Lo sviluppo del progetto è stato eseguito dividendo le varie fasi del compilatori in diverse classi. Package src/Visitor: - ScopeVisitor:Questa classe si occupa della gestione dell'analisi sintattica e quindi del controllo dei costrutti e del lancio di eventuali errori sintattici. Questa implementa l'interfaccia VisitorInterface contenente un metodo visit per ogni costrutto del nostro linguaggio. Oltre i metodi visit questa classe implementa due metodi: lookUP(String s) che data una stringa s e una symbol table cerca in quest'ultima il record passato come parametro; checkDoubleParam(ParamDeclList ex) ci sono dichiarazioni con lo stesso nome all'interno della lista dei parametri. Il program e ogni proc hanno la propria symbol table. Lo scoping è gestito tramite uno stack. - TypeVisitor: Raccoglie informazioni di tipo ,e le memorizza nella tabella dei simboli per poterle usare nella fase successiva. In questa classe avviene il type checking ovvero la verifica dell'adeguatezza degli operandi nelle operazioni seguendo le tabelle sotto esposte. - CodeVisitor: In questa classe si è fatta la trasformazione dal linguaggio TOY al C. Per la realizzazione si sono effettuate alcune scelte progettuali come: Il mancato uso del "null". Le assegnazioni multiple vengono divise in assegnazioni singole. Le procedure che restituiscono uno o più valori di ritorno vengono salvati in variabili di servizio in quanto è possibile nel C passare puntatori di variabili. Abbiamo deciso che i valori booleani saranno stampati come 1 e 0. E' possibile assegnare un intero ad una variabile dichiarata “float”. Nella “write” è possibile invocare funzioni che restituiscono uno o più valori di ritorno. Le funzioni possono restituire funzioni che hanno più valori di ritorno. Alle funzioni possono essere passati, come parametri, funzioni che restituiscono più valori effettuando il salvataggio dei valori di ritorno nelle variabili associzte alle chiamate a procedura prima che venga chiamata la procedura. Le stringhe vengono convertite in array di caratteri, è possibile effettuare un assegnazione di stringa attraverso la strcpy. optype1 op1 operand result - integer integer - float float not bool bool optype2 OP 1OPERAND 2OPERAND RESULT + - * / int int int + - * / int float float + - * / float int float + - * / float float float and or bool bool bool <==> bool bool bool <==> int int bool <==> int float bool <==> float int bool <==> float float bool TABELLA COMPATIBILITA' TIPI int --> int float ---> float||int bool --->bool string --->string TABELLE DI INFERENZE Γ => null:null Γ => true:bool Γ => false:bool Γ => int:int Γ=> float:float Γ=>string:string x:τ ∈ Γ __________ Γ => x:τ (f(τ1,τ2...τn)-> τ1',τ2'...τn')∈ Γ Γ=>e1:τ1 Γ=>e2:τ2.... ______________________________________________________________- Γ=>f(τ1,τ2...τn): τ1',τ2'...τn' (f(τ1,τ2...τn)->void)∈Γ Γ=>e1:τ1 Γ=>e2:τ2 ....... ____________________________________________________ Γ=>f(e1,e2...en) (main()=> void) ∈ Γ _____________________ Γ => main() Γ => e:τ1 optype1(Op1,τ1)=τ ___________________________ Γ => op1 e: τ Γ => e1:τ1 Γ => e2:τ2 optype2(Op2,τ1,τ2)=τ ___________________________________________ Γ => (e1 op2 e) :τ Γ => e:bool Γ =>stmt _________________________ Γ =>while e do stmt od Γ => s:bool Γ =>e Γ =>s1 ___________________________________ Γ =>while s return e do s1 od Γ => e1:bool Γ =>s1 Γ => e2:bool Γ =>s2 Γ =>s3 ________________________________________________ Γ => if e1 then sl elif e2 then s2.... else s3 FI x:τ ∈ Γ Γ=>e:τ' t'<=t ________________________ Γ =>x=e Γ => e1:τ1 Γ => e1:τ1.......... ________________________________ Γ=>write(e1,e2....) (e1:τ1)∈Γ (e1:τ1)∈Γ ..... ________________________________ Γ=>readln(e1,e2....)
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published