Newsgroup: it.comp.lang.c++
Titolo: Programma che filtri i commenti del file sorgente

Ciao Ragazzi,
esiste un programma che sia in grado di filtrare (togliere), da un file
sorgente C tutti i commenti?
Ciao e Grazie!

 Ciao e Grazie!
Ciao e Prego!

.:: P ::. ha scritto:

In Python:
<python_code>
print "inserire nome di un file sorgente"
nomefile = raw_input()
f_sorg = file(nomefile,'r')
print "inserire nome del file dove salvare"
nomefiledest = raw_input()
f_dest = file(nomefiledest,'w')
sorg_lines = f_sorg.readlines()
for line in sorg_lines:
    f_dest.write(line[:line.find('//')]+'\n')
</python_code>
Poi devi togliere anche i  /* ... */ ma ti lascio il divertimento...
-- 
Gerolamo

 Poi devi togliere anche i  /* ... */ ma ti lascio il divertimento...
Eh, bella roba... a togliere i commenti // eran buoni tutti :-)
(senza nemmeno tener conto che il pattern poteva essere contenuto in una 
stringa... ;-))

 contenuto in una stringa... ;-))
<py>
def decommenta(line, index):
    if (line[:index].count('"') - line[:index].count('\\"') )%2==0:
        new_line = line[:line.find('//',index)]
    else:
        index_of_comment = line[index+2:].find('//')
        if index_of_comment == -1:
            new_line = line
        else:
            new_line = decommenta(line, index_of_comment+index+2)
    return new_line
print "inserire nome di un file sorgente"
nomefile = raw_input()
f_sorg = file(nomefile,'r')
print "inserire nome del file dove salvare"
nomefiledest = raw_input()
f_dest = file(nomefiledest,'w')
sorg_lines = f_sorg.readlines()
for line in sorg_lines:
    f_dest.write(decommenta(line,line.find('//'))+'\n')
</py>
Per i /* */ continuo a lasciare il divertimento, oppure
trasferiamoci su it.comp.lang che qui siamo MOLTO OT
(e magari la qualcuno suggerisce un modo più furbo
del mio per togliere i commenti)
follow-up
-- 
Gerolamo

 sorgente C tutti i commenti?
L'ho scritto e postato su it.comp.lang.c nel 1999, prova a vedere se va bene:
#include <stdio.h>
static int stato = 0 ;
int main()
{
    int c ;
    while (( c = getchar() ) != EOF)
    {
          switch( stato )
          {
                case 0 : switch ( c )
                         {
                                case '/'  : stato = 1 ; break ;
                                case '\"' : putchar( '\"' ) ;
                                            stato = 2 ; break ;
                                default   : putchar( c ) ;
                         } ; break ;
                case 1 : if ( c == '*' )
                         {
                            stato = 4 ;
                         }
                         else
                         if ( c == '/' )
                         {
                            stato = 6 ;
                         }
                         else
                         {
                            putchar( '/' ) ;
                            putchar( c ) ;
                            stato = 0 ;
                         }
                         break ;
                case 2 : if ( c == '\\' )
                         {
                            stato = 3 ;
                         }
                         else
                         if ( c == '\"' )
                         {
                            putchar( '\"' ) ;
                            stato = 0 ;
                         }
                         else
                            putchar( c ) ;
                         break ;
                case 3 : putchar( '\\' ) ;
                         putchar( c ) ;
                         stato = 2 ;
                         break ;
                case 4 : if ( c == '*' ) stato = 5 ; break ;
                case 5 : if ( c == '/' )
                         {
                            stato = 0 ;
                         }
                         else
                         {
                            stato = 4 ;
                         }
                         break ;
                case 6 : if ( c == '\n' )
                         {
                            putchar( '\n' ) ;
                            stato = 0 ;
                         }
                         break ;
                default : putchar( c ) ;
          }
    }
    return 0 ;
}

 disse:

Puoi usare un semplice comando sed tipo il seguente:
sed -e s%//.*$%% -e s%/\*([^*]\*)+/%% <infile >outfile
(dovrebbe andare ma no l'ho testato)
--
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /