next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: REJECT Sup: Expresiones Regulares en Flex Ant: unput() Err: Si hallas una errata ...


input()

La función input() lee desde el flujo de entrada el siguiente carácter. Normalmente la utilizaremos si queremos tomar ``personalmente el control'' del análisis. El ejemplo permite ``engullir'' los comentarios (no anidados):
$ cat input.l
%%
"/*" {
        int c;
        for(;;) {
          while ((c=input()) != '*' && c != EOF)
            ;
          if (c == '*')  {
            while ((c = input()) == '*')
              ;
            if (c == '/') break;
          }
          if (c == EOF) {
            fprintf(stderr,"Error: EOF in comment");
            yyterminate();
          }
        }
      }
La función yyterminate() termina la rutina de análisis léxico y devuelve un cero indicándole a la rutina que llama que todo se ha acabado. Por defecto, yyterminate() es llamada cuando se encuentra un final de fichero. Es una macro y puede ser redefinida.
$ flex input.l ; gcc lex.yy.c -lfl ; a.out
hello /* world */
hello
unfinished /* comment
unfinished Error: EOF in comment
He presionado CTRL-D después de entrar la palabra comment.


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: REJECT Sup: Expresiones Regulares en Flex Ant: unput() Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22