ansi-c:
Le nuove keywords sono necessarie per implementare concetti come i cicli while e repeat, così come per implementare le istruzioni if. Il riconoscimento delle espressioni è affidato nella pratica a stmt() ma nella maggior parte dei casi non è un …
Basandoci sulla funzione binary() per cercare ed inserire elementi in un array ordinato, abbiamo implementato una tabella dei simboli contenente strutture con un name e un valore di token.
Il C Ansi definisce una serie di funzioni matematiche come ad esempio sin(), cos(), sqrt(), exp() eccetera. Come un bell'esempio per impratichirsi con il meccanismo dell'ereditarietà, in questo paragrafo estenderemo le funzioni di libreria aggiungendo un parametro double e un …
A chi piace digitare il valore di pi greco o di altre costanti matematiche? Ispirandoci alla soluzione proposta da Kernighan e Pike [K&P94] predefiniamo alcune costanti per il nostro calcolatore. La seguente funzione deve essere chiamata durante l'inizializzazione del riconoscitore.
L'assegnamento è una operazione binaria. Il riconoscitore garantisce che vi sia una variabile come operatore sinistro e una somma come operatore destro. Di conseguenza, quello che abbiamo necessità di implementare è di fatto l'operatore assegnazione, ossia la funzione dinamicamente linkata …
screen() chiama new() per creare un nuovo simbolo variabile e lo restituisce al riconoscitore che provvede ad inserirlo nell'albero delle espressioni.
Dato un metodo generale di ricerca e inserimento, possiamo facilmente gestire la nostra tabella dei simboli. Per prima cosa dobbiamo confrontare una chiave rispetto agli elementi della tabella.
Cercare i simboli tramite il loro nome è un problema classico. Sfortunatamente, lo standard ANSI non definisce una funzione di libreria per risolvere il problema.
LET è un esempio di keyword. Nel costruire lo screener possiamo ancora decidere quale identificatore rappresenterà LET: scan() estrae un identificatore dalla linea di input e lo passa a screen() che controlla nella tabella dei simboli e ritorna il valore …
Una variabile prende parte ad un'operazione in due modi: il suo valore viene usato come operando in un'espressione oppure il valore di un'espressione viene assegnato alla variabile stessa.
In un altro articolo è stata implementata la funzione scan() che accetta una linea di input dal programma principale e gestisce un singolo simbolo di input per ogni chiamata.
move() non è linkata dinamicamente e non usa un metodo linkato dinamicamente per compiere il suo lavoro. Mentre possiamo passare punti e cerchi indifferentemente a move(), non siamo di fronte ad una vera e propria funzione polimorfica. Move() non si …
La programmazione per la grafica offre molte possibilità di sviluppare e approfondire il concetto di ereditarietà: un punto e una lunghezza di lato definiscono un quadrato, un punto e un paio di coordinate di offeset definiscono un rettangolo, un punto …
Poichè stiamo pensando di usare l'ANSI-C non possiamo nascondere il fatto che ereditarietà significa includere una struttura all'inizio di un'altra. L'up-casting è la chiave per riutilizzare un metodo della superclasse sugli oggetti della sottoclasse.
La nostra rappresentazione di un cerchio contiene la rappresentazione di un punto come primo componente della struct Circle. D'altro canto, abbiamo volontariamente deciso di non accedere a questo componente direttamente. Quando vogliamo ereditare, effettueremo il cast-up da Circle a Point …
Gli oggetti di una superclasse e di una sottoclasse sono simili ma non identici nel comportamento. Gli oggetti della sottoclasse hanno generalmente uno stato la cui descrizione può essere più complessa e tipicamente dispongono di più metodi – in altre …
Siamo così pronti a completare l'implementazione del cerchio, e possiamo quindi scegliere una qualsiasi delle tecniche presentate nella sezione precedente, come meglio ci aggrada.
Si passa ora a cercare di implementare Circle_draw(). Il principio dell'information hiding impone di usare tre files per ogni classe in virtù della filosofia "need to know", che tradotto significa "ciò che abbiamo bisogno di sapere". Circle.h contiene …
Un cerchio non è altro che un grosso punto: oltre alle coordinate del centro c'è bisogno di un valore per il raggio. Disegnare un cerchio è un po' diverso rispetto a disegnare un punto, ma spostare un cerchio richiede semplicemente …
Possiamo riciclare i file di new.? Illustrati in un altro articolo con la differenza di eliminare molti metodi e di aggiungere draw() in new.h.