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]