You are on page 1of 66

Lenguajes de Programacin

Anlisis Lxico y Sintctico


Juan Bekios Calfa
Departamento de Ingeniera de Sistemas y Computacin
Universidad Catlica del Norte

Semestre I, 2016

Juan Bekios Calfa

1 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

Informacin de Contacto

2 / 59

Informacin de Contacto

Juan Bekios Calfa


I
I

Departamento de Ingeniera de Sistemas y Computacin


I
I

Email: juan.bekios@ucn.cl
Horario de Atencin: Martes, 18:00 - 19:30 hrs.

Oficina: Y1 - 309
http://www.disc.ucn.cl

Profesor Responsable
I

Juan Bekios Calfa

Juan Bekios Calfa

Informacin de Contacto

3 / 59

Responsables del Material

Juan Bekios Calfa (2013, 2015, 2016)


I
I
I

Email: juan.bekios@ucn.cl
Telfono: +55 2355162
Oficina: Y1-309

Eduardo Aguilar Torres (2014)

Exequiel Fuentes Lettura (2015)

Juan Bekios Calfa

Informacin de Contacto

4 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

Introduccin

5 / 59

Introduccin

La sintaxis de un LP (lenguaje artificial) es muy parecido a


la gramtica en un lenguaje natural (espaol, ingls, etc.).

La sintaxis de un LP es la forma de sus expresiones,


sentencias y unidades, es decir, la forma que debe tener el
cdigo fuente sin considerar su significado.
while ( boolean_expr ) s t a t e m e n t

En sus inicios, la sintaxis se describa mediante largas


explicaciones en ingls y bastantes ejemplos.

Juan Bekios Calfa

Introduccin

6 / 59

Introduccin
I

En los aos 50s Noam Chomski desarrollo la idea de GLC


(Gramtica de libre contexto).

John Backus y Peter Naur, desarrollaron un sistema


notacional para la descripcin de las GLC denominado
BNF (Backus-Naur Form).

Algol 60 primer lenguaje en que su sintaxis es descrita con


BNF.
BNF.

I
I
I

BNF (original).
BNF extendido (EBNF).
Diagramas sintcticos.

Un lenguaje de programacin tiene una estructura lxica y


una estructura sintctica.

Juan Bekios Calfa

Introduccin

7 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

Estructura Lxica

8 / 59

Estructura Lxica

Es la estructura de las palabras de un lenguaje o tokens.

Los tokens se reconocen en la primera fase de la


traduccin (anlisis lxico).
Clasificacin de tokens.

I
I

I
I

Palabras reservadas (palabras clave). Ej.: if, while, etc.


Literal o constante. Ej.: 42 (literal numrico) o hola (string
literal).
Smbolos especiales. Ej.: ;, <=, +, etc.
Identificadores. Ej.: usuarios_registrados.

Juan Bekios Calfa

Estructura Lxica

9 / 59

Estructura Lxica

Determinacin de tokens.
I
I
I

Se utiliza el principio de la subcadena de mayor longitud.


Ej: doif o do if?
Requiere de delimitadores (espacio en blanco).

Los tokens se pueden describir formalmente por medio de


expresiones regulares (ER).

Juan Bekios Calfa

Estructura Lxica

10 / 59

Expresiones Regulares
I
I

Las ER se utilizan para describir patrones de caracteres.


Operadores bsicos de las ER.
I
I
I
I

Otros Operadores de las ER.


I
I
I
I

Concatenacin. (Ej: ab)


Repeticin. (Ej: a*)
Eleccin o Seleccin. (Ej: a|b)
Ejemplo: ((a|b)*c|d).
Rango de caracteres. (Ej: [a-z])
Al menos 1 repeticin. (Ej: a+)
Elemento opcional. (Ej: a?)
Cualquier caracter. (Ej: .)

Las ER se pueden utilizar en muchas reas de la


informtica para describir patrones de texto.

Juan Bekios Calfa

Estructura Lxica

11 / 59

Ejercicio

Escribir la expresin regular que describe un numero


entero y que evite tener 0 a la izquierda.

Juan Bekios Calfa

Estructura Lxica

12 / 59

Ejercicio

Escribir la expresin regular que describe un numero


entero y que evite tener 0 a la izquierda.

Solucin:
^[+-]?[1-9]\d*\$

Juan Bekios Calfa

Estructura Lxica

12 / 59

Ejercicio

Escribir la expresin regular que describe un numero


entero y que evite tener 0 a la izquierda.

Solucin:
^[+-]?[1-9]\d*\$

Regular expression calculator:


http://www.regexr.com/

Juan Bekios Calfa

Estructura Lxica

12 / 59

Ejercicio
I

Escribir la expresin regular que permita validar un correo


electrnico.

Juan Bekios Calfa

Estructura Lxica

13 / 59

Ejercicio

Escribir la expresin regular que permita validar un correo


electrnico.

Solucin simple:
^\S+@\S+\.\S+\$

Juan Bekios Calfa

Estructura Lxica

13 / 59

Ejercicio
I

Escribir la expresin regular que permita validar un correo


electrnico.

Solucin simple:
^\S+@\S+\.\S+\$

Solucin algo ms compleja:


^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w
-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)\$

Juan Bekios Calfa

Estructura Lxica

13 / 59

Ejercicio
I

Escribir la expresin regular que permita validar un correo


electrnico.

Solucin simple:
^\S+@\S+\.\S+\$

Solucin algo ms compleja:


^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w
-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)\$

Recomendacin: enviar email de confirmacin.

Juan Bekios Calfa

Estructura Lxica

13 / 59

Ejercicio
I

Escribir la expresin regular que permita validar un correo


electrnico.

Solucin simple:
^\S+@\S+\.\S+\$

Solucin algo ms compleja:


^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w
-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)\$

Recomendacin: enviar email de confirmacin.

Lectura adicional: http://stackoverflow.com/questions/201323/


using-a-regular-expression-to-validate-an-email-address
Juan Bekios Calfa

Estructura Lxica

13 / 59

Lexer: Comentarios y espacios en blancos

I
I

Espacios en blanco: salto de lnea, tabulador, espacio.


Comentarios.
I
I
I
I

; ... . (Lisp)
% ... . (Prolog)
# ... . (Python, Ruby, Perl)
//..., / ... / . (Java, Javascript)

Los comentarios y espacios en blanco son ignorados, a


menos que funcionen como delimitadores.

Juan Bekios Calfa

Estructura Lxica

14 / 59

Lexer: Palabras reservadas e identificadores


predefinidos
I

Palabras reservadas
I

Son aquellas que estn definidas en el lenguaje pero no


pueden ser utilizadas como un identificador.
Ej (Java): if, for, while,...

Identificadores predefinidos.
I

I
I

Son aquellas que estn definidas en el lenguajes pero que


pueden ser redefinidas y por ende cambiar su significado.
Ejemplo (ADA): integer : boolean;
Fortran no tiene palabras reservadas, todos pueden ser
usados como identificadores. Ej.:
if if then then else else

Juan Bekios Calfa

Estructura Lxica

15 / 59

Palabras reservadas en Java

Juan Bekios Calfa

Estructura Lxica

16 / 59

Analizador Lxico (Scanner)

Es un programa que recibe como entrada el cdigo fuente


de otro programa y produce una salida compuesta por
tokens.

Las reglas se definen por medio de expresiones regulares.

Se implementa como autmatas finitos.

Por lo general se utiliza un procedimiento denominado


getToken() para reconocer un nico token.

Juan Bekios Calfa

Estructura Lxica

17 / 59

Ejemplo de un scanner simple

Tokens .
I
I

Literal o constante: Nmeros enteros ([0-9]+).


Smbolos especiales: +, *, (, )

EOL: Determina el termino de lnea.

ERROR: Caracteres no vlidos.

Se toma la entrada desde teclado o archivo, pero solo de


la primera lnea.

Juan Bekios Calfa

Estructura Lxica

18 / 59

Scanner en C
1
2

4
5
6
7
8
9
10
11
12
13
14

TokenType getToken(void)
{ while ((curr_char = getchar()) == ); /* skip
blanks */
if (isdigit(curr_char)) /* recognize a NUMBER
token */
{ numval = 0;
while (isdigit(curr_char))
{ /* compute numeric value */
numval = 10 * numval + curr_char - 0;
curr_char = getchar();
}
/* put back last character onto input */
ungetc(curr_char,stdin);
return NUMBER;
}
...
Juan Bekios Calfa

Estructura Lxica

19 / 59

Scanner en C

...
else /* recognize a special symbol */
{ switch (curr_char)
{ case (: return LPAREN; break;
case ): return RPAREN; break;
case +: return PLUS; break;
case *: return TIMES; break;
case \n: return EOL; break;
default: return ERROR; break;
}
}

1
2
3
4
5
6
7
8
9
10
11
12

Juan Bekios Calfa

Estructura Lxica

20 / 59

Scanner en C
1
2
3
4
5
6
7
8
9
10
11

12

13
14
15
16

main()
{ TokenType token;
do
{ token = getToken();
switch (token)
{ case PLUS: printf("PLUS\n"); break;
case TIMES: printf("TIMES\n"); break;
case LPAREN: printf("LPAREN\n"); break;
case RPAREN: printf("RPAREN\n"); break;
case EOL: printf("EOL\n"); break;
case NUMBER: printf("NUMBER: %d\n", numval);
break;
case ERROR: printf("ERROR: %c\n", curr_char);
break;
}
} while (token != EOL);
return 0;
}
Juan Bekios Calfa

Estructura Lxica

21 / 59

Scanner en C

Dada la entrada: *+()32#345


La salida del scanner es:

Juan Bekios Calfa

Estructura Lxica

22 / 59

Ejemplo de scanners
I

Lex, Flex, JFlex son algunas de las herramientas que


permiten generar analizadores lxicos.

Lectura adicional:
http://web.stanford.edu/class/archive/cs/cs143/cs143.1128/
handouts/050%20Flex%20In%20A%20Nutshell.pdf

Juan Bekios Calfa

Estructura Lxica

23 / 59

Ejemplo de scanners: Flex

1
2
3
4
5

La estructura bsica consiste de tres secciones separadas


por % %.

Para ejecutar el scanner se puede definir la funcin main


en la seccin cdigo.

La funcin main puede llamar a yylex() para imprimir cada


token.

definitions, options, declarations


%%
rules
%%
C code

Juan Bekios Calfa

Estructura Lxica

24 / 59

Ejemplo de scanners: Flex


I

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

Reconoce nmeros enteros (integer.l).

/*** Definition section ***/


%{
/* C code to be copied verbatim */
#include <stdio.h>
%}
/* This tells flex to read only one input file */
%option noyywrap
%%
/*** Rules section ***/
[+-]?[1-9][0-9]* {
/* yytext is a string containing the matched text. */
printf("Saw an integer: %s\n", yytext);
}
.|\n
{
/* Ignore all other characters. */
}
%%
/*** C Code section ***/
int main(void) {
/* Call the lexer, then quit. */
yylex();
return 0;
}

Juan Bekios Calfa

Estructura Lxica

25 / 59

Ejemplo de scanners: Flex


I

$> flex integer.l

Salida: lex.yy.c

Luego, se compila para generar un ejecutable:


$> gcc -o mylexer lex.yy.c

1
2

Generar lexer:

Ejemplo:
$> ./mylexer <<< "hola1234mundo"
Saw an integer: 1234

Juan Bekios Calfa

Estructura Lxica

26 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

Gramticas de libre contexto y BNF

27 / 59

Gramticas de libre contexto y BNF


I

Consiste en una serie de reglas gramaticales como se


describen a continuacin:
I

Lado Izquierdo: Nombre de la estructura seguido del


metasmbolo ->.
Lado Derecho: Secuencia de elementos (smbolos o
nombres de estructura).
Los nombres de las estructura se denominan
no-terminales.
Las palabras o smbolos de tokens se denominan
terminales.

Genera un conjunto de terminales por medio de la


derivacin de las reglas gramaticales.

Las producciones de las gramticas se presentan en la


forma Backus-Naur.

Juan Bekios Calfa

Gramticas de libre contexto y BNF

28 / 59

Gramticas de libre contexto y BNF


I

La sintaxis de las expresiones regulares no se aplica en


las GLC.
No se puede usar *, |, o parntesis.
I

Incorrecto:
S > a*b
Correcto:
S > Ab
A > Aa |
Incorrecto:
S > a(b|c*)

Juan Bekios Calfa

Gramticas de libre contexto y BNF

29 / 59

Gramticas de libre contexto y BNF


I

La sintaxis de las expresiones regulares no se aplica en


las GLC.
No se puede usar *, |, o parntesis.
I

Incorrecto:
S > a*b
Correcto:
S > Ab
A > Aa |
Incorrecto:
S > a(b|c*)
Correcto:
S > aX
X > b | C
C > C c |

Juan Bekios Calfa

Gramticas de libre contexto y BNF

29 / 59

GLC: Ejemplo

Generar la oracin: the girl sees a dog.

Juan Bekios Calfa

Gramticas de libre contexto y BNF

30 / 59

GLC pueden ser recursivas

Puede ser usada para una simple repeticin (Ej: 2345).

Pero tambin para cosas ms complejas (Ej: (1+2)*3).

Juan Bekios Calfa

Gramticas de libre contexto y BNF

31 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

32 / 59

Sintaxis dirigida por la semntica

La sintaxis establece la estructura de una sentencia (o


programa), no su significado.

Pero, su significado est relacionado a su sintaxis.

El proceso de asociar la semntica dada su estructura


sintctica se llama sintaxis dirigida por la semntica.

Un rbol de anlisis es el mtodo estndar para expresar


la estructura sintctica de un programa.

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

33 / 59

rboles de anlisis sintctico

Escribe de manera grfica el proceso de reemplazo dentro


de una derivacin.

Las hojas son los terminales, los nodos interiores son los
no-terminales y el nodo raz es el smbolo inicial.

Dada la expresin:

Los arboles de anlisis sintcticos para las expresiones 234 y


(2+3)*4 se muestran a continuacin.

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

34 / 59

rboles de anlisis sintctico: Ejemplo

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

35 / 59

rboles de sintaxis abstracta

Condensa el rbol de anlisis sintctico a su estructura


esencial.

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

36 / 59

Ambigedad, asociatividad y precedencia

Una gramtica es ambigua si se cumple que:


I

Para una misma cadena, dos derivaciones distintas


conducen a distintos rboles de anlisis sintctico o
rboles sintcticos abstractos.
Si existen dos derivaciones por la izquierda que permitan
llegar al mismo rbol de anlisis sintctico o rboles
sintcticos abstractos.

La ambigedad debe ser removida ya que la gramtica no


representa una estructura clara.

A menudo, la gramtica puede ser reescrita teniendo en


consideracin la precedencia y la asociatividad de los
operadores.

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

37 / 59

Ejemplo de Ambigedad
I

Considerando la siguiente gramtica:

La expresin 2+3*4 genera los siguientes rboles de


anlisis sintctico:

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

38 / 59

Ejemplo de Ambigedad
I

Considerando la siguiente gramtica:

La expresin 2-3-4 genera los siguientes rboles de


anlisis sintctico:

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

39 / 59

Resolviendo las Ambigedades

El problema de ambigedad en el primer ejemplo se


produce por la precedencia de operadores y en el
segundo ejemplo es por asociatividad.

La recursividad de las reglas definen la asociatividad de


los operadores. Es decir si la regla es recursiva por la
izquierda, la produccin va ser asociativa por la izquierda.

Para la precedencia de operadores, lo que se realiza es


generar nuevas reglas. Mientras ms abajo estn las
reglas, mayor es la precedencia.

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

40 / 59

Resolviendo las Ambigedades


I

An no se resuelve completamente la ambiguedad. Ej.: 3


+ 4 + 5 puede ser (3 + 4) + 5 o 3 + (4 + 5)

La suma es asociativa, entonces no afecta el resultado.


Qu pasa con la resta?

Juan Bekios Calfa

rboles de anlisis y rboles de sintaxis abstracta

41 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

EBNFs y Diagrama Sintctico

42 / 59

Notacin BNF Extendida (EBNF)


I

A diferencia de BNF que es recursiva, EBNF es iterativo.

Permite repeticin y caractersticas opcionales.

{...} expresa 0 o ms repeticiones.

[...] expresa partes opcionales.

Juan Bekios Calfa

EBNFs y Diagrama Sintctico

43 / 59

Diagrama Sintctico
I

Representacin grfica para una regla gramatical.

Siempre se escriben a partir de la notacin EBNF.


Reglas.

I
I
I

Crculos u valos para los terminales.


Cuadrados o rectngulos para los no terminales.
Se pueden unir varias reglas en un nico diagrama.

Herramientas en lnea:
I
I

http://mdaines.github.io/grammophone/
http://www.bottlecaps.de/rr/ui

Juan Bekios Calfa

EBNFs y Diagrama Sintctico

44 / 59

Ejercicio
I

Agregar el menos unario a la siguiente gramtica, de


manera que satisfaga la regla enunciada:
I

Como mximo se permite un menos unario en cada


expresin y debe presentarse al principio. Ej: -2 + 3, -2 +
(-3), pero -2 + -3 no es vlida.
Se permite como mximo un menos unario antes de un
nmero y parntesis izquierdo. Ej: -2 + -3, -2 * -3, pero - -2
y -2 + - -3 no es vlido.
Se permiten arbitrariamente muchos menos unarios antes
de nmeros y parntesis izquierdo, as todo lo anterior es
legal.

Juan Bekios Calfa

EBNFs y Diagrama Sintctico

45 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

46 / 59

Acciones Analizador Sintctico

Se conocen 2 cosas acerca del rbol sintctico:


I
I

El smbolo inicial, el cual es el nodo raz.


Todos los caracteres de entrada, los cuales son todos los
nodos hojas.

Para construir lo que est entre medio se utilizan estas


estrategias:
I
I
I

Bottom-up. (Yacc o Bison)


Top-down. (Javacc)
Descenso recursivo (Mtodo manual).

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

47 / 59

Bottom-up o Shift-reduce
I

Como funciona:
I
I
I
I

Comienza desde abajo con los caracteres individuales.


Usa las reglas para conectar los caracteres.
Al final se reduce a la regla inicial.
Si no funciona, entonces regresar y combinar los tokens de
diferentes formas.
Si ninguna combinacin funciona, entonces la cadena no
es aceptada.

No tiene problema con las gramticas recursivas por la


izquierda.
Considere la siguiente gramtica:
I
I
I

E > E + F | F
F > F T | T
T > int | (E)

Ejemplo: 4 + 3 5 + 1.

Ver Button-Up_Sample.pdf
Juan Bekios Calfa

Tcnicas de anlisis y herramientas

48 / 59

Top-down

El rbol de anlisis sintctico es construido:


I
I

Desde la parte superior.


De izquierda a derecha.

Los terminales son vistos a medida que aparecen en el


flujo de tokens.
Considere la siguiente gramtica:
I
I

E > T + E | T
T > int | (E)

Ejemplo: 4 + 3.

Ver Top-Down_DFS_Sample.pdf

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

49 / 59

Descenso recursivo

Estrategia a seguir para analizadores escritos a mano.

Es un tipo de anlisis Top-down

Basado en EBNF, modela la gramtica con una funcin


para cada terminal.

Los tokens se hacen coincidir con los de entrada segn se


va construyendo por un analizador lxico.

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

50 / 59

Descenso recursivo

Crear analizador sintctico por medio de la estrategia de


descenso recursivo para la siguiente expresin.
Considere las siguientes funciones base:
I
I
I

error()
getToken()
match(char c)

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

51 / 59

Descenso recursivo: Problemas

El analizador sintctico toma decisiones basado en el


siguiente token de entrada.
Estos analizadores requieren que la gramtica cumpla las
siguientes condiciones:
I

Capacidad para escoger entre varias alternativas legales


(FIRST).
Poder decidir sobre reglas gramaticales que contienen
estructuras opcionales (FOLLOW).

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

52 / 59

Ejemplo de analizadores: Bison


I

Es un generador de analizadores sintcticos.

La entrada es una gramtica y genera un analizador que


reconoce las sentencias de esa gramtica.

Bison es utilizado en conjunto con Flex.

Lectura adicional: http://web.stanford.edu/class/archive/cs/


cs143/cs143.1128/handouts/120%20Introducing%20bison.pdf

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

53 / 59

Ejemplo de analizadores: Bison

1
2
3
4
5
6
7
8

La estructura bsica es muy similar a Flex.

%{
Declarations
%}
Definitions
%%
Productions
%%
User subroutines

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

54 / 59

Ejemplo de analizadores: Bison

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Analiza nmeros enteros (integer.l).

%{
#include "integer.tab.h" // including parser
%}
/* This tells flex to read only one input file */
%option noyywrap
%%
[+-]?[1-9][0-9]* {
yylval = atoi(yytext);
return INTEGER;
}
[a-zA-Z]+ {
yylval = 0;
yyerror("Unknown character");
}
.|\n { /* do nothing */}
%%

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

55 / 59

Ejemplo de analizadores: Bison

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Analiza nmeros enteros (integer.y).

%{
#include <stdio.h>
void yyerror(char *);
%}
/* The %token direction defines the "terminal symbol" token types */
%token INTEGER
%%
exp:
exp INTEGER { printf("exp INTEGER: %d\n", $2); }
| INTEGER { printf("INTEGER: %d\n", $1); }
;
%%
void yyerror(char *s) {
fprintf(stderr, " %s\n", s);
}
int main(void) {
yyparse();
}

Juan Bekios Calfa

Tcnicas de anlisis y herramientas

56 / 59

Ejemplo de analizadores: Bison


I

$> bison -d integer.y && flex integer.l

Salida: integer.tab.c, integer.tab.h y lex.yy.c

Luego, se compila para generar un ejecutable:


$> gcc integer.tab.c lex.yy.c

1
2
3
4

Generar el analizador:

Ejemplo:
$> ./a.out <<< "hola1234mundo"
Unknown character
INTEGER: 1234
Unknown character
Juan Bekios Calfa

Tcnicas de anlisis y herramientas

57 / 59

Agenda
1

Informacin de Contacto

Introduccin

Estructura Lxica

Gramticas de libre contexto y BNF

rboles de anlisis y rboles de sintaxis abstracta

EBNFs y Diagrama Sintctico

Tcnicas de anlisis y herramientas

Bibliografa

Juan Bekios Calfa

Bibliografa

58 / 59

Bibliografa

Louden, K. "Programming Languages: Principles and


Practice", tercera edicin. Course Technology, 2011.
(Captulo 6)
Juan Bekios Calfa

Bibliografa

59 / 59

You might also like