Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    12

    [Flex] esercizio compressione testo

    Salve a tutti,
    da pochissimo, per motivi universitari, mi sto cimentando nell'imparare ad usare il generatore di scanner Flex.
    Mi sto esercitando risolvendo alcuni esercizi basilari, con buoni risultati, ma sono rimasto bloccato nel seguente:
    "Scrivere un programma che comprima gli spazi e i tab in un unico singolo blank, e rimuova quelli alla fine della linea".
    Non ho difficoltà nel matchare i caratteri da rimuovere ma non ho idea di come rimuoverli, appunto. Avreste qualche suggerimento?

  2. #2
    Puoi usare [$ \t]+\n per trovare spazi e tabulazioni alla fine della linea e sostituirli con un newline.
    Per gli spazi in mezzo alle parole puoi usare [ \t]+:

    codice:
    %%
    
    [$ \t]+\n { fprintf(stdout, "\n"); }
    [ \t]+    { fprintf(stdout, " "); } 
    .  { fprintf(stdout, "%s", yytext); }
    
    %%
    
    int main(int argc, char **argv)
    {
      if( argc > 1 )
      {
        if( !(yyin = fopen(argv[1], "r")) )
        {
          perror(argv[1]);
          return -1;
        }
      }
    
      yylex();
      return 0;
    }
    
    int yywrap() { return 1; }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    12
    Ottimo. Ti ringrazio.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    12
    In questa maniera viene valutata l'analisi rigo per rigo (per ogni "invio" da terminale ho in output il risultato dell'analisi).
    Se io volessi invece passare più righe all'analizzatore, così da ricevere in output un unico risultato finale?
    Devo utilizzare un file, quindi creare un txt con l'intero testo da analizzare?

  5. #5
    Originariamente inviato da cnigpp
    In questa maniera viene valutata l'analisi rigo per rigo (per ogni "invio" da terminale ho in output il risultato dell'analisi).
    Se io volessi invece passare più righe all'analizzatore, così da ricevere in output un unico risultato finale?
    Devo utilizzare un file, quindi creare un txt con l'intero testo da analizzare?
    Si, puoi creare un file txt e passare il nome del file al programma da riga di comando:

    Esempio file "prova.txt":



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.