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
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
Beh il case è un blocco come gli altri ( che a sua volta puo' contenre
blocchi. Il case è un blocco qualcosa del tipo
new( NewCase, Create( espressione ) );
NewCase.AddCondition( condizione, istruzione_1 );
NewCase.AddCondition( condizione, istruzione_2 );
NewCase.AddCondition( condizione, istruzione_3 );
...
NewCase.AddCondition( condizione, istruzione_n );
e ovviamente
NewCase.AddElse( istruzione_n );
non mi sembra una cosa così "brutta"... ma è anche per questo che ho
"chiseto" :)
> Penso che una struttura a grafo sia più
> indicata.
Esemplifica.
> L'idea dello stack per la gestione della chiusura dei blocchi aperti sembra
> buona.
> Il tutto però rinunciando alla cara vecchia istruxione goto, naturalmente.
>
Istruzione goto?
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
Neach'io :D
> 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
Apparte che io ho in mente una lista di istruzioni ( è diverso anche se
simile a un albero ) la goto è un istruzione come qualunque altra,
quindi si puo' creare un elemento salto e un elemento etichetta e
trattare il tutto come un istruzione.
Io intendevo una struttra bastata sulla mia libreria ( e per questo che
l'ho costrutita ). Ho creato solo la LinkedList, ma in effetti potrei
anche fare ArrayList anche se a me interessa scorrere la lista in
sequenza non in modo randomico.
>
> 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?
in effetti forse non mi serve poi a molto... basta scorrere la lista in
sequenza... ho ancora le idee un po' confuse :)
> una domanda vorrei comunque farla: cosa pensi manchi ai compilatori
> 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