compiladores

6
Compiladore s Análisis Léxico Oscar Bonilla [email protected] Universidad Galileo

Upload: eliana-weiss

Post on 30-Dec-2015

20 views

Category:

Documents


0 download

DESCRIPTION

Compiladores. Análisis Léxico. Oscar Bonilla [email protected] Universidad Galileo. Flex. Generador de Analizadores Léxicos diseñado por Vern Paxson. Formato del archivo de entrada. Definiciones %% Reglas %% Código de usuario. Definiciones: %{ literal %}. Ejemplo. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Compiladores

CompiladoresAnálisis Léxico

Oscar [email protected] Galileo

Page 2: Compiladores

FlexGenerador de Analizadores Léxicos diseñado por Vern Paxson

Definiciones%%Reglas%%Código de usuario

Formato del archivo de entrada

Definiciones:%{literal%}

Page 3: Compiladores

Ejemplo

/* un scanner para un lenguaje similar a Pascal */%{#include <math.h>%}

DIGIT [0-9]ID [a-z][a-z0-9]*

:::

Page 4: Compiladores

Ejemplo%%{DIGIT}++ {

printf( "An integer: %s (%d)\n", yytext,atoi(yytext) );

}{DIGIT}+"."{DIGIT}* {

printf("A float: %s (%g)\n", yytext,atof(yytext) );

}if|then|begin|end|procedure|function {

printf("A keyword: %s\n", yytext );}

{ID} printf ("An identifier: %s\n", yytext);"+"|"-"|"*"|"/" printf("An operator: %s\n", yytext);"{"[^}\n]*"}" /* eliminar comentarios */[ \t\n]+ /* eliminar blancos */. printf ("Invalid token: %s\n", yytext);

Page 5: Compiladores

Ejemplo

%%

main(int argc, char** argv) {++argv, --argc;if (argc > 0)

yyin = fopen(argv[0], "r");else

yyin = stdin();yylex();

}

Page 6: Compiladores

¿Cómo lo corremos?

● Lo guardamos en un archivo (pascal.lex)

$ flex pascal.lex$ cc -o pascal lex.yy.c$ ./pascal prueba.pas.....