Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Divagazioni

1 view
Skip to first unread message

Il Razziatore

unread,
Apr 6, 2008, 10:18:46 PM4/6/08
to
Salve a tutti,
ho fatto un parser ( <47aa7e6d$0$10626$4faf...@reader2.news.tin.it> ),
ho fatto il Pascal Collection Framework (
<47d3260d$0$10627$4faf...@reader2.news.tin.it> ) 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

Luigi_newsgroup

unread,
Apr 7, 2008, 8:48:29 PM4/7/08
to

"Il Razziatore" <ilrazz...@gmail.com> ha scritto nel messaggio
news:47f98506$0$4793$4faf...@reader4.news.tin.it...

> 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...

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


Il Razziatore

unread,
Apr 8, 2008, 11:21:25 AM4/8/08
to
Luigi_newsgroup ha scritto:

>
> 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).


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?

markbass72

unread,
May 7, 2008, 6:41:20 AM5/7/08
to
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

Il Razziatore

unread,
May 8, 2008, 12:40:03 PM5/8/08
to
markbass72 ha scritto:

> premesso che di compilatori non ne ho mai scritti né analizzati...
>

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

http://razziatore.no-ip.com/mpp/

0 new messages