Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [c]come fare per richiamare un fiel in (Yacc/Bison)

    Ciao ragazzi,ho bisogno di aiuto.Non riesco a richiamare all'interno del mio flex un'altro file da far analizzare allo scanner oltre a quello appena analizzato.So che si dovrebbe usare la funzione yywrap o yyrestart o comunque una cosa simile.Potete darmi una mano gentilmente?
    Grazie in anticipo per la risposta.

  2. #2

    [c]come fare per richiamare un fiel in (Yacc/Bison)

    Nessuno sa aiutarmi....Per favore qualcuno mi aiuti....

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Dovresti dare qualche informazione in piu'...che libreria è? cosa fa? links?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Dovrei praticamente passare allo scanner un file diverso da quello analizzato.Infatti non appena finisco di analizzare un file devo dire al flex di inziare a compilarne un'altro passato sempre da me.

  5. #5
    Ciao,

    dovrebbe essere sufficiente richiamare la funzione yyparse(generata da Yacc/Bison) una volta per ogni file da analizzare.
    Nel seguente esempio, l'utente specifica uno o più file da riga di comeando e il programma effettua il parsing di ognuno dei file:

    codice:
    void parse(char *filename)
    {
    	yyin = fopen(filename, "r");
    	if (yyin == NULL)
    	{
    		fprintf(stderr,"Impossibile aprire il file: %s\n", filename);
    	}
    	else
    	{
    		if (yyparse() == 0)
    			fprintf(stderr,"Parsing eseguito con successo!\n");
    		else
    			fprintf(stderr,"Parsing fallito.\n");
    	}
    }
    
    int main(int argc, char **argv)
    {
    	int k;
    
    	if (argc<2)
    	{
    		fprintf(stderr,"uso: %s filename\n", argv[0]);
    		return -1;
    	}
    
    	for ( k = 1; k < argc; k++ )
    	{
    		printf("\nParsing del file %s:\n\n", argv[k]);
    		parse(argv[k]);
    	}
    
    	return 0;
    }
    x XWolverineX : Bison(e il suo antenato, Yacc) è un generatore di parser e, cioè, un compilatore di compilatori :master: . Puoi vedere qui:

    http://it.wikipedia.org/wiki/Generatore_di_parser

  6. #6
    Originariamente inviato da Vincenzo1968
    Ciao,

    dovrebbe essere sufficiente richiamare la funzione yyparse(generata da Yacc/Bison) una volta per ogni file da analizzare.
    Nel seguente esempio, l'utente specifica uno o più file da riga di comeando e il programma effettua il parsing di ognuno dei file:

    codice:
    void parse(char *filename)
    {
    	yyin = fopen(filename, "r");
    	if (yyin == NULL)
    	{
    		fprintf(stderr,"Impossibile aprire il file: %s\n", filename);
    	}
    	else
    	{
    		if (yyparse() == 0)
    			fprintf(stderr,"Parsing eseguito con successo!\n");
    		else
    			fprintf(stderr,"Parsing fallito.\n");
    	}
    }
    
    int main(int argc, char **argv)
    {
    	int k;
    
    	if (argc<2)
    	{
    		fprintf(stderr,"uso: %s filename\n", argv[0]);
    		return -1;
    	}
    
    	for ( k = 1; k < argc; k++ )
    	{
    		printf("\nParsing del file %s:\n\n", argv[k]);
    		parse(argv[k]);
    	}
    
    	return 0;
    }
    x XWolverineX : Bison(e il suo antenato, Yacc) è un generatore di parser e, cioè, un compilatore di compilatori :master: . Puoi vedere qui:

    http://it.wikipedia.org/wiki/Generatore_di_parser
    Ho inserito il tuo codice...ma mi da i seguenti errori
    http://img299.imageshack.us/my.php?image=progsn3.jpg

  7. #7
    Devi dichiarare la variabile yyin:

    codice:
    extern FILE *yyin;
    Ti posto il codice completo:

    codice:
    #include <stdio.h>
    
    extern int yyparse(void);
    extern FILE *yyin;
    
    void parse(char *filename)
    {
    	yyin = fopen(filename, "r");
    	if (yyin == NULL)
    	{
    		fprintf(stderr,"Impossibile aprire il file: %s\n", filename);
    	}
    	else
    	{
    		if (yyparse() == 0)
    			fprintf(stderr,"Parsing eseguito con successo!\n");
    		else
    			fprintf(stderr,"Parsing fallito.\n");
    	}
    }
    
    int main(int argc, char **argv)
    {
    	int k;
    
    	if (argc<2)
    	{
    		fprintf(stderr,"uso: %s filename\n", argv[0]);
    		return -1;
    	}
    
    	for ( k = 1; k < argc; k++ )
    	{
    		printf("\nParsing del file %s:\n\n", argv[k]);
    		parse(argv[k]);
    	}
    
    	return 0;
    }
    fa parte(modificato in modo da accettare più file) dell'esempio che ho usato qui:

    http://forum.html.it/forum/showthrea...readid=1245150



    Ciao

  8. #8

    [c]come fare per richiamare un fiel in (Yacc/Bison)

    Ciao vincenzo,ti ho mandato un mess privato per chiarire un ultimo mio dubbio....ti è arrivato ????

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Ciao,la discussione mi interessa molto.
    Tempo fà ho sputato sangue per creare un applicazione che lanciava espressioni regolari per ricercare le stringhe nei sorgenti di un progetto c++ da tradurre.
    E' possibile con questi programmi farsi restituire le stringhe e i char contenuti in un file c++(.cpp)?
    Sarebbe per me molto utile.
    grazie.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Dove si puo' scaricare il file da includere yyin?
    In particolare ho visto come funziona il lexical parser.
    Nel mio caso mi basterebbe inserire un espressione regolare che mi restituisce tutto cio che è tra 2 apici "" .
    Il problema è che ho delle casistiche a cui devo reagire in modo differente , ad es se ho un CString strName="giuseppe" è molto semplice , ma se ad es come ho nel mio progetto:
    CString strName ="giuseppe"
    "ferrari";

    le due stringhe vanno concatenate , ed ecco che ad es le espressioni regolari si fanno piu' complesse e difficili.
    Per non parlare poi delle casistiche dei char.
    Il mio sogno sarebbe avere un parser che genera una lista di "tutto cio che è una stringa" come se fosse un compilatore.
    ad es
    Stringhe:
    "Giuseppe"
    "Ferrari"

    ma penso sia impossibile.
    E' così?
    grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.