PDA

View Full Version : [Flex] Dare file in input al programma.


Alexhat
05-02-2009, 11:48
Salve,
sto imparando ad utilizzare Flex (generatore di scanner in C++), ed ho provato a fare un semplice programma di esempio che conti il numero di righe e di caratteri presenti in un file.

Ho fatto dunque il seguente file .fl
%{
int num_lines = 0, num_chars = 0;
%}

%option noyywrap

%%
\n ++num_lines; ++num_chars;
. ++num_chars;


%%
main()
{
yylex();
printf("Il file contiene %d caratteri in %d righe.\n", num_chars, num_lines);
}

l'ho compilato con Flex ottenendo il "lex.yy.c" e poi ho compilato quest'ultimo usando il compilatore incluso in Dev-C++ (ovvero gcc); questa procedura ha generato un file .exe come previsto, e fin qui ci siamo.

Il problema (molto stupido ma a cui non ho ancora trovato risposta) è il seguente: come fare a passare il file di testo da dare in input al programma generato? Digitando nel prompt "nomeprogramma.exe nomefile.txt" non ottengo nulla, per cui suppongo che non sia questa la procedura esatta.

Scusate per la banalità della domanda :stordita:

Ciao :D

Vincenzo1968
05-02-2009, 15:15
Devi aggiungere il codice seguente prima della chiamata a yylex():


if ( argc > 1 )
yyin = fopen( argv[1], "r" );
else
yyin = stdin;


Modifica il tuo codice così:

%{
int num_lines = 0, num_chars = 0;
%}

%option noyywrap

%%
\n ++num_lines; ++num_chars;
. ++num_chars;


%%
main(int argc, char **argv)
{
if ( argc > 1 )
yyin = fopen( argv[1], "r" );
else
yyin = stdin;
yylex();
printf("Il file contiene %d caratteri in %d righe.\n", num_chars, num_lines);
}