Your SlideShare is downloading. ×
Usando flex en Windows
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Usando flex en Windows

3,467
views

Published on

El parser de unix usado desde Windows con MinGW Shell

El parser de unix usado desde Windows con MinGW Shell

Published in: Education

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,467
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Usando Flex
    M. Rico, 2011
  • 2. Flex en Windows (1/4)
    Usa MinGW (http://www.mingw.org/)
    Descarga e instala mingwgetinst (mingw-get-inst-20110211.exe)
  • 3. Flex en Windows (2/4)
    Tras la instalación, ejecuta la aplicación MinGW Shell
  • 4. Flex en Windows (3/4)
    Comprueba que están instalados:
    gcc
    flex
    Vim
  • 5. Flex en Windows (4/4)
    ¿Dónde están los archivos?
    Si MinGW está instalado en C:/MinGW
    El directorio home se encuentra en C:MinGWmsys1.0home
    Flex genera un ejecutable Windows (.exe) que se puede ejecutar independientemente de MinGW
    Como un .exe cualquiera.
  • 6. Usando flex. Ejemplo simple (1/2)
    simple.flex
    %%usernameprintf( "%s", "mariano" );
    simple.text
    Esto es una prueba
    Linea 2.
    Linea 3 con un username y alguna cosa mas.
    Ultima linea.
  • 7. Usando flex. Ejemplo simple (2/2)
    Lee simple.flex y genera el código C del parser en el fichero lex.yy.c
    Crea el parser compilando el fichero lex.yy.cc y linkando con la librería de flex (-L indica la ubicación de la librería de flex)
    El parser lee de stdin el texto a parsear, por eso se usa la pipa <
    Este parser sustituye username por mariano
  • 8. Ejemplo simple2 (1/2)
    /* Esto es un comentario */
    %{
    /* Necesario para la funcionatof */
    #include <math.h>
    %}
    DIGITO [0-9]
    ID [a-z][a-z0-9]*
    %%
    {DIGITO}+ {
    printf("Entero: %s (%d)n", yytext, atoi(yytext));
    }
    {DIGITO}+"."{DIGITO}* {
    printf("Un decimal: %s (%g)n", yytext, atof(yytext));
    }
    {ID} printf("Un identificador: %sn", yytext);
    "/*"[^n]*"*/" /* fuera comentarios de una linea */
    [ tn]+ /* fuera espacios o retornos o tabuladores */
    . printf("Caracter raro: %sn", yytext);
    %%
    main (intargc, char** argv){
    ++argv, --argc; /* me salto el nombre del prog */
    if (argc > 0){
    yyin = fopen(argv[0], "r");
    }else{
    yyin = stdin;
    }
    yylex();
    }
    Sección de definiciones
    simple2.flex
    Sección de reglas
    En lugar de stdin, que lea de un fichero (argumento de flex)
    Sección de ejecución
  • 9. Ejemplo simple2 (2/2)
    Genero el código C del parser
    Genero el parser
    Contenido del fichero de prueba
    Resultado de la ejecución
  • 10. Ejemplo email (1/2)
    email.flex
    /* Esto es un comentario */
    %{
    /* Necesario para la funcionatof */
    #include <math.h>
    %}
    USER [a-z][a-z0-9]*
    HOST [a-z][a-z0-9]*
    %%
    {USER}"@"{HOST} {
    printf("Un email: %s n", yytext);
    }
    [ tn]+ /* fuera espacios o retornos o tabs*/
    . /*printf("Caracter raro: %s", yytext);*/
  • 11. Ejemplo email (2/2)
    Genero el código C del parser
    Genero el parser
    Contenido del fichero de prueba
    Resultado de la ejecución
  • 12. Mail mejorado
    El anterior no consideraba los dominios separados por .
    Sólo contemplaba algo@algo
  • 13. Contador de palabras y caracteres
    contador.flex
    /* Contador tipo wc de Unix */
    %{
    intchars = 0;
    intwords = 0;
    intlines = 0;
    %}
    %%
    [a-zA-Z]+ { words++; chars += strlen(yytext); }
    n { chars++; lines++; }
    . { chars++; }
    %%
    main(intargc, char **argv){
    yylex();
    printf("%8d%8d%8dn", lines, words, chars);
    }
  • 14. Más en…
    http://catalog.compilertools.net/