Newsgroup: it.comp.lang.c
Titolo: Input formattato

 - rimuovi XXX  x  rispondere  ICQ	#8814554
 
In seguito, [Benjamin] Franklin ando' a far parte della schiera dei Pionieri
dell'Elettricita' i cui nomi sono diventati parte della nostra terminologia
elettrica: Myron Volt, Mary Louise Amp, James Watt, Bob Trasformatore, ecc.
Questi pionieri condussero molti importanti esperimenti elettrici.  Ad esempio,
nel 1780 Luigi Galvani scopri' (questo e' vero) che, quando lui collegava due
differenti tipi di metallo alle zampe di una rana, si sviluppava una corrente
elettrica e le zampe della rana scalciavano, anche se  poi  la	corrente
terminava di circolare nella rana, che era comunque morta.  La scoperta di
Galvani porto' a enormi progressi nel campo della medicina anfibia.  Oggi,
esperti chirurghi veterinari possono prendere una rana che e' stata gravemente
ferita o uccisa, impiantare pezzi di metallo nei suoi muscoli, e vederla
saltellare nello stagno come una rana normale, eccetto il fatto che va a fondo
come una pietra.
		-- Dave Barry, "What is Electricity?"

Il tuo problema e' facilmente risolvibile con un programma (gratuito,
a distribuzione gratuita) che e' un analizzatore lessicale.
Questo programma produce il codice in C per riconoscere espressioni
regolari, ... ed inserire le tue funzioni e controlli.
Sotto sistemi Unix/Linux/Minix si chiama : "LEX"
(puoi verificarne la semplice sintassi _standard_ anche attraverso le
pagine di manuale on-line),
e si chiama "FLEX" sotto sistemi DOS/Windows.
Quest'ultima e' compreso nel compilatore DGJPP.
Per inciso con il sorgente C che tale "LEX" (o "FLEX") produce, puoi
fare molte altre applicazioni piu' "corpose" (compilatori, ...) usando
di seguito un altro programma (gratuito) YACC ("Yet Another Compiler
Compiler") o BISON (sotto DOS/Win).
Lex e' "una costola" (anche se indipendente) di Yacc.

 - rimuovi XXX  x  rispondere  ICQ	#8814554
 
Potere e' pericolo.
		--  Il	Centurione,  "Balance  of   Terror",   data   astrale	1709.2

fread()...)
scanf() e' assolutamente sconsigliabile.
Meglio fgets.
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

(sempre di lex?)
In tutti i parser che ho scritto ho sempre letto il sorgente un
carattere alla volta (usanto getc) perche' la ritengo la cosa piu'
comoda. Ad essere precisi realizzo i parser con qualcosa come:
   /* lexer */
   int CurChar;      /* Carattere corrente */
   void SkipChar();  /* Legge un altro carattere */
   /* parser */   
   int CurToken;     /* Token corrente */
   void SkipToken(); /* Legge un altro token */
Io trovo l'approccio corrente/skip preferibile al sistema che viene
invece mostrato ad esempio in "The C++ Programming Language" nel
programma calcolatrice.
Ho dato un'occhiata a yacc/bison e ho fatto qualche esperimento ma
non ho mai provato ad usarli seriamente (ho iniziato a scrivere
parser prima di sapere cosa fossero lex/yacc).
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

bye!
Riduci la firma per cortesia.


 - rimuovi XXX  x  rispondere  ICQ	#8814554
 
Oltre un certo	numero	di  decimali,  nessuno	ti  da'  piu'  un  tubo.