Newsgroup: it.comp.lang.pascal
Titolo: Divagazioni

 ) tutto questo in 
previsione di questo momento, ora è venuto il momento di inizare a 
scrivere il mio ( e forse anche vorsto ) compilatore Pascal. Analiziamo 
il problema insieme. Cose'è un compilatore? Un compilatore è qualcosa 
che prende un programma e genera un eseguibile.
Okay. Per fere questo ho bisogno di un parser ( e c'è l'ho ). A sto 
punto la domanda diventa "Un programma pascal com'è fatto?". E' una 
lista di istruzioni incapsulate da un blocco begin-end. quindi abbiamo 
un qualcosa del genere
begin
    istruzione_1;
    istruzione_2;
    ...
    istruzione_n;
end.
bene prendiamo per semplificità che un istruzione o è un identificatore 
oppure è un blocco begin-end ( dove un blocco begin end ha la seguente 
struttra:
begin
    istruzione_1;
    istruzione_2;
    ...
    istruzione_n;
end
okay.
Io ho pensato di gestire il tutto in questo modo ( e veniamo alla 
domandona ). Io faccio una lista ( TLinkedList ) di un oggetto ( 
TStatament ) dove ogni blocco funzionale del pascal ( Begin-end, 
if-then-else, ecc ecc ) è una classe che erdita da TStetament con metodi 
particolari. Ad esempio il blocco begin end potrebbe avere un metodo per 
aggiungere altre istruzioni al blocco:
block.addStatament( statament );
mentre ovviamente le istruzioni semplici non hanno bisogno di altri 
metodi particolari.
Il programma nel suo complesso diventerebbe un unico blocco Begin-End e 
quindi mi basterebbe creare un blocco quando trovo il begin iniziale poi 
   piano piano che trovo un identificatore ( un istruzione ) lo aggiungo 
al blocco e se trovo "begin" credo un altro blocco e ricomicio, finche 
non trovo un end e a quel punto aggiungo il blocco n al blocco n-1.
Voi vi stareste domandando ( ma che vuole questo da me? ) ecco: Secondo 
voi tutto questo discorso è sensato? Ma sopratutto come gestireste i 
vari blocchi... stavo pensando di usare uno stack
se avete commenti sarei felice di sentrili...
-- 
Il Razziatore,
"Lo sviluppo di una nazione si misura anche dallo stato della sua rete 
ferroviaria". Camillo Benso Conte di Cavour
"Per tutto quanto non previsto nel presente regolamento il capostazione 
deve usare senno e ponderatezza." Regolamento d'esercizio FS
-----------------------------------------------
MSN   : 
IlRazz...@netscape.net
ICQ   : 67552596
Yhaoo : Razziatore82
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.com

 se avete commenti sarei felice di sentrili...
non sono un esperto di creazione di compilatori, ma credo che una 
rappresentazione come quella da te descritta (che č una specie di albero) 
renda assai difficile la gestione dei flussi di esecuzione (immagina una 
struttura case per esempio). Penso che una struttura a grafo sia piů 
indicata.
L'idea dello stack per la gestione della chiusura dei blocchi aperti sembra 
buona.
Il tutto perň rinunciando alla cara vecchia istruxione goto, naturalmente.
Luigi 

 
Istruzione goto?


premesso che di compilatori non ne ho mai scritti né analizzati...
l'albero a me sembra una buona cosa per rappresentare una serie di
istruzioni e se l'assenza del goto (non la uso da anni) può essere un
problema, comunque sia, ogni elemento dell'albero avrà comunque un
indice immagino... si può quindi pensare di usare questo stratagemma
per lo stack, riflettendoci su, non ho capito bene se sia necessario:
un albero lo si potrebbe vedere come uno stack, solo che invece di
aggiungere in coda, si crea un nodo e si scende dentro, mentre per
togliere dalla coda si può risalire il nodo
che ne pensi?
una domanda vorrei comunque farla: cosa pensi manchi ai compilatori
pascal di oggi? o è solo un esperimento personale?
ciao

 pascal di oggi? o è solo un esperimento personale?
E' sicuramente un esperimento personale. Cosa manca ai compilatori 
potrei dire niente e tutto. Per me il miglior compilatore pascal era il 
Turbo Pascal 7 ( che tutt'ora ho installato e non lo disinstallerei mai 
). Ho un rapporto di "amore-odio" con il Free Pascal. Lo installo e lo 
disinstallo continuamente. Lo installo perché il TP ormai è vecchio e il 
  pascal si è ovoluto nel tempo ( eccezioni, classi ecc ) e il Free 
Pascal è abbastanza attuale, il problema è IDE non mi ci trovo, dirai 
che è uguale a quello del TP ma boh lo trovo diverso, lo trovo meno 
perfomante, mi ci trovo peggio. La Borland se li faceva anche pagare ma 
li sapeva ( e li sa ) scrivere gli IDE...
Poi ultimo ( ma non ultimo ) al Free Pascal manca una cosa ( che ad 
esempio il GCC ha ) la possibilità di dire "non usare la libreria 
standard" così da usare una tua libreria e di fare un binario flat ( una 
spece di com per capirci... un dump della memoria e basta.
-- 
Il Razziatore,
"Lo sviluppo di una nazione si misura anche dallo stato della sua rete 
ferroviaria". Camillo Benso Conte di Cavour
"Per tutto quanto non previsto nel presente regolamento il capostazione 
deve usare senno e ponderatezza." Regolamento d'esercizio FS
-----------------------------------------------
MSN   : 
IlRazz...@netscape.net
ICQ   : 67552596
Yhaoo : Razziatore82
-----------------------------------------------
Founder of MediaPlayer Project
http://razziatore.no-ip.com/mpp/