basico flex

Páginas: 5 (1078 palabras) Publicado: 2 de diciembre de 2013
Sintaxis y Semántica de Lenguajes
Flex y Bison

I.S.I - UTN
2010

GUÍA DE TRABAJOS PRÁCTICOS
TEMAS: FLEX Y BISO
2DA PARTE
Introducción
Podemos definir a Lex cómo una herramienta para construir analizadores léxicos o
lexers. Un lexer lee un flujo de entrada (normalmente de stdin o de algun otro archivo)
y lo divide en unidades léxicas (llamadas tokens) cómo un producto final o para serprocesadas por otro programa.
Yacc (acrónimo de Yet Another Compiler Compiler) es una herramienta que, a partir
de la descripción de una gramática que define un lenguaje, genera un analizador
sintáctico (parser) para esa gramática. De manera muy simple, podemos decir que
una gramática define o especifíca secuencias válidas de tokens válidos. Al igual que
en Lex, un programa en Yacc sedivide en 3 partes:

declaraciones
%%
reglas de producción
%%
código adicional
Declaraciones
La primera parte puede contener:
• Especificaciones escritas en el lenguaje destino, definidas entre %{ y %} (cada
símbolo colocado al principio de una línea).
• Declaraciones de tokens, con la palabra clave %token.
• El tipo del terminal, con la palabra reservada %union.
• Información sobre lasprioridades de los operadores y su asociatividad.
• El axioma de la gramática, o símbolo inicial, usando la palabra reservada
%start (si no se especifica, el axioma es la primera regla de la segunda parte
del archivo).
La variable yylval, declarada implícitamente en el tipo %union es importante ya que
contiene la descripción del último token leído.

Reglas de producción
Esta es la únicaparte necesaria, esto es, la que siempre debe aparecer en un
programa yacc. Puede contener:
• Declaraciones y/o definiciones encerradas entre %{ y %}.
• Reglas de producción de la gramática.
Las reglas de producción son definidas así:

expresion_no_terminal: cuerpo_1 { sentencias acciones 1 }
| cuerpo_2 { sentencias acciones 2 }
| ...
| cuerpo_n { sentencias acciones n }
;
donde cuerpo_ipueden ser expresiones terminales o no terminales del lenguaje.

Código adicional
Esta parte contiene código adicional. En nuestro caso debe contener la función main()
que debe llamar a la función yyparse(), y una función yyerror(char *mensaje), que será
llamada cuando ocurra un error de sintaxis.

Página 1 de 4

Sintaxis y Semántica de Lenguajes
Flex y Bison

I.S.I - UTN
2010Objetivo
El objetivo de esta práctica es combinar programas Lex y Yacc, usando Flex y Bison,
a fin de adquirir los conocimientos básicos para resolver el Trabajo Práctico Grupal,
que se les entregará aparte.

Ejercicios
1) Realizar un programa para simular una calculadora simple. Para lo cual se
requiere realizar los siguientes pasos:
a. Capture el siguiente programa lex(flex) y guárdelo en unarchivo llamado
calculadora.l
/* calculadora.l */
%{
#include "calculadora.tab.h"
%}
separador
([ \t])+
digito
[0-9]
numero
{digito}+
%%
{separador} { /* omitir */ }
{numero}
{ yylval = atoi(yytext);return(NUM);}
"+"
{ return(MAS);}
"-"
{ return(MENOS);}
"*"
{ return(POR);}
"="
{ return(yytext[0]);}
.
{ return(yytext[0]);}
\n
{ return(yytext[0]);}
%%

b. Capture elsiguiente programa yacc(bison) y guárdelo en un archivo
llamado calculadora.y
%{
#include
%}
%token
NUM MAS MENOS POR
%start comando
%%
comando
: exp '=' { printf("El resultado es %d\n",$1);return
;
exp
: exp MAS NUM
{ $$ = $1 + $3;printf("%d + %d = %d\n",$1, $3,
| exp MENOS NUM
{ $$ = $1 - $3;printf("%d - %d = %d\n",$1, $3,
| exp POR NUM
{ $$ = $1 * $3;printf("%d * %d = %d\n",$1,$3,
| NUM { $$ = $1;printf("%d\n",$1);}
;
%%
#include "calculadora.yy.c"
yyerror(char *s){
printf("Error %s\n", s);
}
main(){
yyparse();
}

0;}
$$);}
$$);}
$$);}

c. Compilación de los programas bison y flex. Primero debemos compilar el
programa bison y luego el programa flex.
i. Teclee el comando

bison -d calculadora.y

Página 2 de 4

Sintaxis y Semántica de...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • flexo
  • Flex
  • Flexo
  • Flex
  • flex
  • flex
  • flexo
  • Flexo Compresion

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS