40
Compiladores e Intérpretes Análisis Léxico Sebastian Gottifredi Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2019 1

Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes

Análisis LéxicoSebastian Gottifredi

Universidad Nacional del Sur

Departamento de Ciencias e Ingeniería de la Computación

2019

1

Page 2: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Esquema General del Análisis Léxico

2

Page 3: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Esquema General del Análisis Léxico

• El programa fuente es una cadena de caracteres

• Tenemos que reconocer si esa cadena pertenece al

lenguaje utilizando las reglas de sintaxis del lenguaje

• Las reglas de sintaxis se expresan en términos de

“palabras”

3

if(id1>10)

var= “hola”;

else

print “chau”;

//fin

TEXT:if(id1>10)var=_“hola”;elseprint_“chau”;//fin

Page 4: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

if ( id > num ) id = String ; else print String ;

Esquema General del Análisis Léxico

• El Analizador Léxico es el encargado de leer “directamente” el texto del programa fuente

• Busca construir esas palabras o subcadenasagrupando caracteres

• Elimina blancos, separadores y comentarios

• Informa de Errores Léxicos

4

Analizador

Léxico

if(id1>10)var=_“hola”;elseprint_“chau”;//fin

Page 5: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

• El Analizador Léxico funciona por demanda!

• El analizador sintáctico irá solicitándole palabras

Esquema General del Análisis Léxico

5

if(id1>10)var=_“hola”;elseprint_“chau”;//fin

if(id

NEXT!

Analizador

Sintáctico

Analizador

Léxico

Page 6: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Esquema General del Análisis Léxico

• En esta etapa también se detectan los errores léxicos

• Estos errores se producen, por ejemplo, cuando:

• Aparece un caracter extraño que no es una “palabra” del lenguaje

(por ejemplo: el carácter ⌂ en un código java)

• Cuando una de las “palabras” del lenguaje está mal formada (por

ejemplo en Pascal 123ab es un número o identificador mal formado)

• Se detecta un comentario multi-línea sin cerrar

6

Page 7: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Tokens

7

Page 8: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Tokens

• Las “palabras o subcadenas” agrupadas por el

analizador léxico son llamadas Lexemas

• Son clasificadas en Tokens

• Los Tokens caracterizan subcadenas con un rol dentro

del lenguaje de programación

• Ejemplos de Tokens:

• Enteros, Strings, Identificadores, palabra clave IF, Igual, etc..

8

Page 9: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Tokens

• Algunos tokens identifican conjuntos de subcadenas

• Por ejemplo:

• Token Identificador: subcadena que empiezan con una letra y

sigue con una sequencia de letras y/o dígitos

• Ejemplos de Lexemas: id1 var myvar amigo a1244

• Token String: subcadena que comienza con “, sigue con una

secuencia de caracteres, y termina con ”

• Ejemplos de Lexemas: “hola” “me#@!!&” “id1”

9

Page 10: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Tokens

• Otros Tokens son identificados por una única subcadena

• Por ejemplo:

• Token Igual: subcadena con el caracter =

• Token Mayor o Igual: subcadena con los carácteres >=

• Token Palabra Clave IF: subcadena con los caracteres if

10

Page 11: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Tokens

• La salida del analizador léxico ante un pedido del

analizador sintáctico es un token.

• El token retornado está acompañado por el lexema

caracterizado por ese token.

• El lexema es un atributo del token retornado!

11

if(id1>10)var=_“hola”;else

if(id

NEXT!

Analizador

Sintáctico

Analizador

Léxico

Lexema: id1

Page 12: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Tokens

• Los espacios, tabs, enters (blancos) y comentarios NO

son tokens!

• Como los blancos y comentarios no son tokens, no

son retornados por el analizador léxico!

12

Page 13: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Especificando Tokens –Expresiones Regulares

13

Page 14: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Especificando Tokens – Expresiones Regulares

• Para implementar el analizador léxico de un lenguaje de

programación tenemos que identificar sus tokens

• Describir los lexemas que los caracterizan, es decir, dar una

especificación para los tokens del lenguaje

• El formalismo usual para esta tarea son los Lenguajes

Regulares

• ¿Por qué estos lenguajes?

14

Son lenguajes formales menos

complejos, más simples y más eficientes

capaces identificar los lexemas.

Page 15: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Especificando Tokens – Expresiones Regulares

• Los lenguajes regulares se notan con expresiones regulares (ER):

• Dado un alfabeto una expresión regular r puede ser:

• Un caracter c de

• la cadena vacía

• Dadas dos expresiones regulares r1 y r2 en se puede construir como:

• r1r2 (secuencia)

• r1|r2 (opción)

• r1* (clausura: 0 o mas repeticiones de r1)

• r1+ (clausura positiva: 1 o mas repeticiones de r1)

• Se puede usar paréntesis para indicar agrupamiento o precedencia

15

Page 16: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Especificando Tokens – Expresiones Regulares

• El conjunto de cadenas o lenguaje que genera con una

expresión regular r se denota L(r),

• Por ejemplo, si r3 = a(b|c) tenemos que L(r3) = {ab, ac}

• ¿Qué representa rd = (0|1|2|3|4|5|6|7|8|9)?¿Cómo es L(rd)?

• ¿Cómo es la expresión regular re para un entero? y ¿L(re)?

• ¿Cómo sería la de un identificador?

• ¿La de mayor?¿La de mayor o igual?

16

Por simplicidad usamos [0..9], [a..z] y

[A..Z] para caracterizar dígitos, letras

minúsculas y letras mayúsculas

respectivamente. Tambien usamos

Letra = [a..z]|[A..Z] para caracterizar

cualquier letra

Pizarrón!

Page 17: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Reconociendo Tokens –Autómatas Finitos

17

Page 18: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Reconociendo Tokens – Autómatas Finitos

• Los Autómatas Finitos (AF) reconocen cadenas de los

lenguajes regulares

• Un autómata finito esta formalmente caracterizado por:

• Alfabeto

• Conjunto de estados E

• Función de transición de estados T: E x → E

• Estado inicial I

• Conjunto de estados finalizadores F E

18

Estado

Estado Inicial

Estado Aceptador

Transiciónc

Page 19: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Reconociendo Tokens – Autómatas Finitos

• El AF va aplicando transiciones a medida que consume los

caracteres de la cadena de entrada

• Partiendo del estado inicial, si el autómata puede consumir

toda la toda la cadena y queda en un estado finalizador acepta

la cadena sino rechaza la cadena

19

abba

aabb

abbaa

abba

aabb

abbaa

e0 e1 e2a

b a

a

Page 20: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Reconociendo Tokens – Autómatas Finitos

• Dada una ER podemos construir un AF que reconoce el lenguaje generado por esa expresión

• ¿Cómo sería el autómata para reconocer X? donde X es:

• El operador mayor

• El operador mayor o igual

• Palabra clave else

• Enteros

• Identificadores

20

Pizarrón!

Page 21: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2019

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementado Analizadores Léxicos

21

Page 22: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Para implementar el Analizador Léxico vamos a usar los AF

que reconocen las ER asociadas a cada token del lenguaje

• ¿Cómo lo implementamos?

• Recibe y va leyendo el programa fuente

• Funciona por demanda

• Ante un pedido, reconoce un token y lo retorna

• Al retornar un token puede no haber terminado de procesar el

programa fuente

22

Page 23: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Ante un pedido el Analizador Léxico debería poder reconocer

cualquier token válido

23

el Analizador Léxico se

basará en un AF que se

construye uniendo

adecuadamente los AFs

de cada ER

e0digito digito

e1Entero

e0letra letra o

digito

e1Id

e0 e1 e2> =Mayor

o Igual

e0 e1>

Mayor

Pizarrón!

Page 24: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Hay tokens que comparten prefijos

24

Mayor

o Iguale0 e1 e2

> =

e0 e1>

Mayor

… > …No

determinista!

e0 e3 e4> =

e5>

Page 25: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Hay tokens que comparten prefijos

25

e0 e1 e2> =

e0 e1>

e0 e3 e4> =Mayor

o Igual

Mayor

… > …

Page 26: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Los estados terminadores deben retornar el token

reconocido (con su lexema)

26

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

Next

Token!

…>=5…

Page 27: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Los estados terminadores deben retornar el token

reconocido (con su lexema)

27

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…>=5…

Page 28: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Los estados terminadores deben retornar el token

reconocido (con su lexema)

28

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…>=5…

op>=

Lexema: >=

Page 29: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• La cadena de entrada puede contener más de un token

29

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…>=5…

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…>=5…

Next

Token!

Al iniciar el

reconocimiento

de un token

debe estar en el

estado inicial

Next

Token!

Page 30: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Reconocer el token más grande posible

30

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…543>=

Next

Token!

Page 31: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Reconocer el token más grande posible

32

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…543>=

Estoy en un estado

terminador… pero

tengo que seguir

armando el token!

Aún no hay que

retornar nada!

Page 32: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Reconocer el token más grande posible

33

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…543>=

Page 33: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando Analizadores Léxicos

• Reconocer el token más grande posible

34

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…543>=

int

Lexema: 543

Termino porque mirando el

caracter (sin consumirlo)

no puedo seguir armando

el lexema del token

Page 34: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

• Los blancos y comentarios no son tokens

• Aun así el Analizador Léxico debe ser capaz de procesarlos, ya que:

• Se pueden usar como separadores entre tokens (ids, números, etc)

• Para ignorarlos hay que consumirlos

• Pueden tener errores! (solo en comentarios)

• El autómata debería tener transiciones para realizar estas tareas

35

¿Cómo consumirían los

espacios, tabs y enters?

Pizarrón!

Page 35: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

• ¿Cómo detectamos un error léxico?

36

Analizador Léxico

digitoe1

e0letra

e2

e3 e4> =

letra o

digito

…~…

Estando en un estado no

terminador y el caracter

actual no se corresponde

con ninguna transición

Page 36: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

•Estrategias para codificar el autómata

• Subprogramas x Estado

• Swtich/Case

• Tabla

• Herramientas Automáticas

37

Page 37: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

• Subprogramas: para cada estado ei, creamos una función ei():

38

Si caracterActual = c1

Agregar caracterActual a lexemaActual

Consumir caracter

retornar el resultado de e1()

Sino Si caracterActual = cn

Agregar caracterActual a lexemaActual

Consumir caracter

retornar el resultado de ek()

Sino

ERROR!

e1

ei

ek

NextToken():

lexemaActual = vacio

retornar el resultado de e0()

Pizarrón!

Page 38: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

• Subprogramas: para cada estado ej, creamos una función ej():

39

Si caracterActual = c1

Agregar caracterActual a lexemaActual

Consumir caracter

retornar el resultado de e1()

Sino Si caracterActual = cn

Agregar caracterActual a lexemaActual

Consumir caracter

retornar el resultado de em()

Sino

retornar token asociado a ej

e1

ej

em

Pizarrón!

Page 39: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

• Switch/Case: la función nextToken captura todos los estados

40

Loop

switch (estado):

case ei:

Si caracterActual = c1

Agregar caracterActual a lexemaActual

Consumir carácter

estado = ej

break

Sino

Si ei es aceptador retornar token de ei

Sino ERROR!

case ej: …

end loop

ej

ei

ek

Page 40: Compiladores e Intérpretes Análisis Léxicolc/cei/downloads/Clases... · Compiladores e Intérpretes 2017 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional

Compiladores e Intérpretes 2017

Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur

Implementando el Analizador Léxico

• En general implementar las palabras claves del lenguaje

utilizando sus AF es problemático porque:

• Requiere muchos estados (casi uno por letra de la palabra clave)

• Hay que fusionar esos estados entre sí y con los de identificadores

• En la mayoría de los lenguajes las palabras clave son

prácticamente identificadores “especiales”…

41

Cuando armamos un token

identificador controlamos si

no es una palabra clave en

una tabla de palabras clave!

¿Cómo podemos

aprovechar esto?