| V I S U A L I Z Z A D I S C U S S I O N E |
| Tano |
Inserito il - 03/07/2003 : 17:11:13 Viene accettato un compilatore che necessita i token separati da spazi? Per mancanza di tempo (e sopratutto per le risposte non ricevute da Ferilli) non riesco a trovare una soluzione per non far separare i token dagli spazi.. Qualcuno di voi ha qualche idea?
Grazie |
| 6 U L T I M E R I S P O S T E (in alto le più recenti) |
| Tano |
Inserito il - 04/07/2003 : 12:35:34 E poi scusa quella funzione che mi hai dato non si ferma quando trova un carattere diverso da "a..Z", si ferma solo quando trova uno spazio o quando i raggiunge 255 ..
E' praticamente la stessa funzione che ho implementato io.. UFF a me non importa se mi abbassa il voto, l'importante è che me lo accetti e mando a fare in culo sto esame.. |
| Tano |
Inserito il - 04/07/2003 : 12:24:35 Ho mandato una email a ferilli.. speriamo risponda.. Io potrei pure implementarla, mi SONO ROTTO LA BALLE di sto cazz di compilatore.. Voglio solo documentare.. E poi dai, è una cavolata il fatto degli spazi, manco fosse quello il fulcro del compilatore -_- . |
| Dreamhell |
Inserito il - 04/07/2003 : 02:07:49 mi sà che non te lo accetta! Paioneer ha ragione a dire che la scansione dovrebbe essere fatta carattere per carattere settando la variabile lookahead. forse ti può servire questa funzione che si ferma non solo quando trova gli spazi, ma anche la punteggiatura in generale:
void leggi_stringa(FILE *f, char s[MAX]) { int i=0; char caract;
caract=fgetc(f); while(!isspace(caract) && i <= 255 && caract != EOF){ s[i] = caract; i++; caract = fgetc(f); } s[i] = '\0'; } |
| Tano |
Inserito il - 04/07/2003 : 00:47:07 Non è un problema legato alla risoluzione degli spazi è che Ferilli ci ha dato delle dispense sulle quali la funzione Gettoken mette in un vettore di caratteri tutti i token separati da spazio. Se faccio carattereper carattere, non ho problemi, ma oramai ho deciso di seguire il filo delle dispense e non posso buttare nel cesso tutto quello che ho fatto fino ad ora. Del resto il compilatore funziona perfettamente, con l'unico problema che accetta solo token separati da spazio.. Non vorrei che per questa piccola cazzata non mi accetti il progetto. Io documento tutto, è chiaro... |
| paioner |
Inserito il - 03/07/2003 : 21:00:57 Comunque Ferilli ha detto che possiamo prendere qualsiasi decisione purchè sia motivata e DOCUMENTATA! Quindi tocca a te decidere! |
| paioner |
Inserito il - 03/07/2003 : 20:58:25 Credo ke il problema sia: come faccio a riconoscere a:=10+b; in: a := 10 + b ; se sono tutti attaccati?
la risposta è: inizio la scansione e trovo a, siccome è un carattere o è una keyword oppure in identif (in breve KEY o ID). Quindi continuo per leggere tutta la parola. Poi trovo : allora capisco ke la parola è finita e setto lookahead a true perchè ho letto i : ma non li ho usati e restituisco la stringa "a" che devo decidere se è una key o un id. a questo punto leggo i : e lo scanner dovrebbe procedere leggendo = e riconoscendo l'operatore := si ferma restituendo appunto := Poi lo scanner legge 1 e deve continuare a leggere tutti i numeri, cosi dopo aver letto lo 0 trova il + Adesso si ferma, setta lookahead a true (per lostesso motivo di prima) e restituisce 10 dicendo che è un intero. Poi legge e riconosce il + come operatore. Poi legge b, trova ; e capisce che la stringa è finita e restituisce la parola b dovendo poi decidere se è key o id. infine legge e riconosce ;
come vedi non sono necessari gli spazi tra i token, perchè se devo riconoscere un intero, quando trovo qualcosa ke non è una cifra mi posso fermare. Se sto riconoscendo un id, quando trovo un operatore, o generalmente qualcosa che non fa parte della struttura di un id mi fermo, mentre + - * e altri operatori sono riconosciuti immediatamente.
Spero di essere stato chiaro. Ciao |