Está en la página 1de 32

COMPILADORES

Anlisis Lxico 1

Basado en: Oscar Bonilla - Universidad Galileo

jprecondor@gmail.com

2012 Agosto

Anatoma de un compilador
2

Programa (character stream)

Anlisis

Analizador Lxico (Scanner) Token stream Analizador Sintctico (Parser) Parse Tree Analizador Semntico Intermediate Representation Optimizador de Cdigo Optmized Intermediate Representation

Sntesis

Generador de Cdigo
Assembly code
2012 Agosto

jprecondor@gmail.com

Anatoma de un compilador
3

Programa (character stream)

Anlisis

Analizador Lxico (Scanner) Token stream Analizador Sintctico (Parser) Parse Tree Analizador Semntico Intermediate Representation Optimizador de Cdigo Optmized Intermediate Representation

Sntesis

Generador de Cdigo
Assembly code
2012 Agosto

jprecondor@gmail.com

Qu es un analizador lxico?
4

Source Program Text


Ejemplos de Tokens:

Tokens

operadores keywords literales numricos literales de carcter strings literales espacios en blanco comentarios

= + - > ( { := == <> if while for int double 43 6.035 -3.6e10 0x13f3a 'a' '~' '\'' "6.983" "compiladores" "\"\"" espacio(' ') tab('\t') eol('\n') /* este no es un token */
2012 Agosto

Ejemplos de no-tokens

jprecondor@gmail.com

Los analizadore lxicos deben...


5

f o r

va r 1

10
Num(10)

va r 1<=
ID(var1) leq_op

for ID(var1) eq_op


correcto de tokens

Separar precisamente el stream de texto en el stream

ID("var1") no ID("var") Num(1) ID("var1") leq_op no ID("var1<=")


Identificar el tipo de token que hace match con el stream

de input

10 Num(10) var1 ID("var1")


jprecondor@gmail.com

2012 Agosto

Los analizadores lxicos deben...


6

f o r

va r 1

10
Num(10)

va r 1<=
ID(var1) leq_op

for ID(var1) eq_op


lenguajes

Describir diferentes tipos de tokens en diferentes

FORTRAN C++ C-shell

DO I=1, 10 for(int i=1; i < 10; i++) foreach i (1 2 3 4 5 6 7 8 9)

jprecondor@gmail.com

2012 Agosto

Otro Ejemplo:
7

float match0(char s) /* find a zero */ {if (!strncmp(s, "0.0", 3)) return 0.; }
FLOAT ID(match0) LPAREN CHAR STAR ID(s) RPAREN LBRACE IF LPAREN BANG ID(strncmp) LPAREN ID(s) COMMA STRING(0.0) COMMA NUM(3) RPAREN RPAREN RETURN REAL(0.0) SEMI RBRACE EOF

jprecondor@gmail.com

2012 Agosto

Cmo describimos un IDENTIFICADOR?


8

Identificador:

de letras y dgitos El primer carcter debe ser una letra. El guin bajo cuenta como una letra. Las letras en maysculas y minsculas son distintas. Los espacios en blanco, tabuladores, nuevas lneas, y comentarios son ignorados. Se requiere mnimo un blanco para separar identificadores, keywords y constantes.
jprecondor@gmail.com

Secuencia

2012 Agosto

Programando un analizador lxico


9

Podemos implementar un analizador lxico (lexer ad

hoc) en cualquier lenguaje de programacin Pero tambin podemos generalizar!


Usamos

expresiones regulares para definir formalmente qu secuencia de strings constituyen los tokens Implementamos el lexer usando automata finitos determinsticos

jprecondor@gmail.com

2012 Agosto

Estructuras Lgicas I
10

Alfabeto: conjunto finito de smbolos. A = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } Cadena: secuencia finita de smbolos del alfabeto. s = 543 Cadena Nula: cadena especial de longitud cero.

Lenguaje: conjunto de cadenas tomadas de un alfabeto. L = { 543, 547, 548, 542 }


jprecondor@gmail.com

2012 Agosto

Estructuras Lgicas II
11

Expresin Regular: conjunto de cadenas construido a partir de reglas.

jprecondor@gmail.com

2012 Agosto

Construyendo expresiones regulares


12

Smbolos:
Cada smbolo se denota a s mismo a "a"

jprecondor@gmail.com

2012 Agosto

Construyendo expresiones regulares


13

Alternacin: Dadas dos expresiones regulares M y N, el operador de alternacin denotado por | crea una nueva expresin regular M | N. Una cadena est en el lenguaje de M | N si est en el lenguaje de M o est en el lenguaje de N. a|b "a" "b"

jprecondor@gmail.com

2012 Agosto

Construyendo expresiones regulares


14

Concatenacin: Dadas dos expresiones regulares M y N, el operador de concatenacin denotado por crea una nueva expresin regular M N.

Una cadena est en el lenguaje de M N si es la concatenacin de cualesquiera dos cadenas M y N tal que N est en el lenguaje de M y M est en el lenguaje de N.
ab "ab"

jprecondor@gmail.com

2012 Agosto

Construyendo expresiones regulares


15

Epsilon: La expresin regular epsilon representa un lenguaje cuya nica cadena es la cadena nula.

""

""

jprecondor@gmail.com

2012 Agosto

Construyendo expresiones regulares


16

Repeticin: Dada una expresin regular M, su cerradura de Kleene es M*. Una cadena est en M* si es la concatenacin de cero o ms cadenas, todas pertenecientes a M. a* { "", "a", "aa", "aaa", ... }

jprecondor@gmail.com

2012 Agosto

Abreviaturas usadas en clases


17

A las cadenas les llamamos strings. Omitimos el smbolo de concatenacin.

Omitimos el smbolo de epsilon.

Asumimos que la cerradura de Kleene tiene precedencia sobre la concatenacin.


Asumimos que la concatenacin tiene precedencia sobre la alternacin.
jprecondor@gmail.com

2012 Agosto

Abreviaturas usadas en esta clase


18

A las cadenas les llamamos strings. Omitimos el smbolo de concatenacin.

Omitimos el smbolo de epsilon.

Asumimos que la cerradura de Kleene tiene precedencia sobre la concatenacin.


Asumimos que la concatenacin tiene precedencia sobre la alternacin.
jprecondor@gmail.com

2012 Agosto

Abreviaturas usadas en esta clase


19

A las cadenas les llamamos strings. abc abc

Omitimos el smbolo de epsilon.

Asumimos que la cerradura de Kleene tiene precedencia sobre la concatenacin.


Asumimos que la concatenacin tiene precedencia sobre la alternacin.
jprecondor@gmail.com

2012 Agosto

Abreviaturas usadas en esta clase


20

A las cadenas les llamamos strings. abc abc

( a | "" )

(a|)

Asumimos que la cerradura de Kleene tiene precedencia sobre la concatenacin.


Asumimos que la concatenacin tiene precedencia sobre la alternacin.
jprecondor@gmail.com

2012 Agosto

Abreviaturas usadas en esta clase


21

A las cadenas les llamamos strings. abc abc

(a|"")

(a|) a (b*)

ab*

Asumimos que la concatenacin tiene precedencia sobre la alternacin.


jprecondor@gmail.com

2012 Agosto

Abreviaturas usadas en esta clase


22

A las cadenas les llamamos strings. abc abc

(a|"")

(a|) a (b*)

ab*

ab | c
jprecondor@gmail.com

(a b) | c
2012 Agosto

Ms abreviaturas
23

[abcd] [b -g]

( a | b | c | d) [bcdefg]

[b -gM-Qkr]

[bcdefgMNOPQkr]
(M|"")

M?

M+
jprecondor@gmail.com

M M*
2012 Agosto

En resumen
24

a ""

Un caracter ordinario. El string vaco. Otra forma de escribir el string vaco. Alternacin, elegir M o N. Concatenacin, M seguida de N Otra forma de escribir concatenacin. Repeticin (cero o ms veces). Repeticin (una o ms veces) Opcional, cero o una ocurrencia de M. Alternacin de un conjunto de caracteres. Un punto sustituye cualquier caracter excepto nueva lnea. Strings entre comillas no son interpretados.
2012 Agosto

M|N MN MN M* M+ M? [a -zA -Z] . "a.+*"


jprecondor@gmail.com

Algunos ejemplos
25

( 0 | 1 )* 0 b*abb*a?

Nmeros binarios mltiplos de 2. Strings de a's y b's sin a's consecutivas.

[ab]*aa[ab]*
(0|1|2|3|4|5|6|7|8|9) dgito dgito* -?posint

Strings de a's y b's que contienen a's consecutivas.


Un dgito. Un entero positivo (posint). Un entero (int).

int (, posint)?
jprecondor@gmail.com

Un real
2012 Agosto

Analizadores Lxicos
26

Fragmento de Programa en Lex if [a-z][a-z0-9]* [0-9]+ ([0-9]+"."[0-9]*) | ([0-9]*"."[0-9]+) ("--"[a-z]*"\n") | (" " | "\n" | "\t")+ . Con cul regla hace match el string "if8"? Con cul regla hace match el string "if 8"? Necesitamos dos reglas ms!
jprecondor@gmail.com

{ return IF; } { return ID; } { return NUM; } { return REAL; } { /* do nothing */ } { error(); }

2012 Agosto

Dos reglas ms
27

Match ms largo El substring inicial ms largo de la entrada que puede construirse con una expresin regular es tomado como el siguiente token.

Prioridad de Reglas Para un match ms largo en particular, la primer expresin regular que genere el string determina el tipo de token. El orden en que se escriben la expresiones regulares es importante.

jprecondor@gmail.com

2012 Agosto

Ahora s:
28

Fragmento de Programa en Lex if [a-z][a-z0-9]* [0-9]+ ([0-9]+"."[0-9]*) | ([0-9]*"."[0-9]+) ("--"[a-z]*"\n") | (" " | "\n" | "\t")+ .

{ return IF; } { return ID; } { return NUM; } { return REAL; } { /* do nothing */ } { error(); }

if8 if 8

por match ms largo por prioridades

ID IF NUM

jprecondor@gmail.com

2012 Agosto

Pregunta
29

Qu expresin regular hace match con los nmeros desde 0 hasta 256 y nada ms?

jprecondor@gmail.com

2012 Agosto

Cmo reconocemos Expresiones regulaes (RE's)?


30

La expresiones regulares son tiles para describir strings, pero necesitamos reconocerlos.

Esta es la diferencia entre conocimiento declarativo (qu es) y conocimiento imperativo (cmo hacerlo).

As que usamos expresiones regulares para describir los strings, pero usamos automata finitos para reconocerlos.

jprecondor@gmail.com

2012 Agosto

Lxico 1: Preguntas?
31

jprecondor@gmail.com

2012 Agosto

Anlisis Lxico 1
32

Gracias por su atencin


jprecondor@gmail.com

2012 Agosto