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

Analizzatore sintattico

14 views
Skip to first unread message

Il Razziatore

unread,
Sep 9, 2010, 10:45:02 PM9/9/10
to
Salve Caro NG,
la 4 ( si hai letto bene la 4 ) riscrittura del codice del mio
compilatore ( che ha cambiato nome da CPC a NPC ) si è arricchito di
un'analizzatore sintattico.

Avevo già proveduto a riscrivere il parser: la maggiore differenza tra
la 3 e la 4 riscrittura del parser: nelle precedenti versioni il parser
leggeva un file di testo ( f : text ) e analizzava i token a partire da
un buffer ( la riga corrente del file sorgente una volta finita ne
leggeva un altra ) nella nuova versione invece il parser legge un file
dati non tipizzato ( F : File ) e utilizzo un buffer di 512 caratteri (
un settore del disco ), volendo si potrebbe ampliare a piacere.

Un altra novità e che finalmente sono arrivato a toccare l'analizzatore
sintattico: quella parte del compilatore che capisce cos'è il token,
decide se era quello che voleva o se si aspettava altro ( è proprio in
questa parte che nascono i vari "; EXPECTED".

Attualmente il compilatore riconosce un subset molto minimale del
linguaggio pascal per la precisione ( ometto le definizioni più basilari
). In particolare riconosci i sorgenti scritti secondo questa struttura:

intestazione
/zona dichiarativa/
begin
/istruzioni/
end.

dove l'intestazione è il classico PROGRAM Nome(in,out); ma ho
implementato l'estenzione del dialetto borland quindi si puo' omettere
in e out o addirittura si possono dare quanti parametri vuoi ( intanto
vengono felicemente ignorati )

La zona dichiarativa è una qualunque di queste cose, anche ripetitute:
- Definizione delle unit usate ( non ancora implementata )
- Definizione di etichette ( non ancora implementata )
- Definizione di costanti ( non ancora implementata )
- Definizione di tipi ( non ancora implementata )
- Definizione di varibili ( non ancora implementa )
- Definizione di procedure e funzioni ( non ancora implementata )

appena l'analizzatore sintattico riconosce queste cose dice che non sono
implementate. Ma da notare che l'analizzatore sintattico pero' prevede
questa struttura, se uno prova a eluderla ( ad esempio mettendo una
seconda intestazione l'analizzatore sintattico da errore )

Anche il blocco princiale non è ancora stato implementato ( ma viene
riconosciuto ).

Cosa è stato implementato insomma? Solo l'intestazione :D Ma è stata una
faticaccia! Oh! E sono orgolioso del mio analizzatore sintattico :-)

In totale i sorgenti di NPC sono composti da 698 linee per un totale di
19.312 caratteri. Appena il compilatore riuscira a compilare un file
minimale con solo la dichiarazione delle varibile e semplici espressioni
aritmentiche ( ad esempio un banale A := B + C ) rilascero i sorgenti
visto che avro ragiunto la versione 0.1[.0]

0 new messages