---+++ I esercizio (20/04/05): analizzatore lessicale per espressioni aritmetiche Si deve scrivere una funzione =next_token= che suddivide in token una espressione aritmetica descritta dalla grammatica <div align=center> <table> <tr> <td> e </td> <td> ::= </td> <td> *(* e<sub>1</sub> op e<sub>2</sub> *)* | n | s </td> </tr> <tr> <td> op </td> <td> ::= </td> <td> *+* | <b>*</b> </td> </tr> <tr> <td> n </td> <td> ::= </td> <td> _un numero naturale decimale_ </td> </tr> <td> s </td> <td> ::= </td> <td> _una sequenza alfanumerica che comincia con un carattere alfabetico_ </td> </tr> </table> </div> La funzione =next_token= legge l'input e a ogni chiamata ritorna il successivo token letto dall'input, restituendo le informazioni necessarie alla identificazione del token: * se si tratta di una stringa, ovvero di un identificatore, e la stringa corrispondente * se si tratta di un naturale e il suo valore * se si tratta di un operatore aritmetico e di quale si tratta (*+* o <b>*</b>) * se si tratta di una parentesi aperta o chiusa Il programma dovrà essere completato da un main che apre l'eventuale file da cui leggere se si vuole fornire l'input da file e non da stdin ed esegue un ciclo di lettura fino alla fine del file oppure fino alla lettura di un token speciale che segnala la terminazione (ad esempio, il carattere '.'), stampando dopo ogni token le informazioni che si sono lette. _Soluzione_ * [[http://www.dsi.uniroma1.it/~guerrini/LabProg/es-0405/token/token.c][token.c]]: contiene l'implementazione di =next_token= e una funzione =print_tk= che stampa un token. Tra i simboli è stato aggiunto il '.' per poterlo usare come terminatore dell'input. * [[http://www.dsi.uniroma1.it/~guerrini/LabProg/es-0405/token/token.h][token.h]]: header file contenente la definione di =token= e i prototipi delle funzioni in token.c. * [[http://www.dsi.uniroma1.it/~guerrini/LabProg/es-0405/token/test-token.c][test-token.c]]: un semplice programma che verifica token.c e tokene.h leggendo e stampando una sequenza di token terminata da un '.' letta da input. -- Users.StefanoGuerrini - 28 Apr 2005
This topic: Labprog2pz
>
WebHome
>
IEs
Topic revision: r2 - 2005-05-04 - StefanoGuerrini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback