diagrama de transición de estados

13
Diagrama de Transición de Estados. Como paso intermedio en la construcción de un analizador léxico, primero convertimos los patrones en diagramas de flujo estilizados, a los cuales se les llama “diagramas de transición de estados”. Los diagramas de transición de estados tienen una colección de nodos o círculos, llamados estados. Cada estado representa una condición que podría ocurrir durante el proceso de explorar la entrada, buscando un lexema que coincida con uno de varios patrones. Podemos considerar un estado como un resumen de todo lo que debemos saber acerca de los caracteres que hemos visto entre el apuntador inicio Lexema y el apuntador avance. Las Líneas se dirigen de un estado a otro del diagrama de transición de estados. Cada línea se etiqueta mediante un símbolo o conjunto de símbolos. Si nos encontramos en cierto estado s, y el siguiente símbolo de entrada es a, buscamos una línea que salga del estado 5 y este etiquetado por a (y tal vez por otros símbolos también). Si encontramos dicha línea, avanzamos el apuntador avance y entramos al estado del diagrama de transición de estados al que nos lleva esa línea. Asumiremos que todos nuestros diagramas de transición de estados son deterministas, lo que significa que nunca hay más de una línea que sale de un estado dado, con un símbolo dado de entre sus etiquetas Algunas convenciones importantes de los diagramas de transición de estados son: 1. Se dice que ciertos estados son de aceptación, o finales. Estos estados indican que se ha encontrado un lexema, aunque el lexema actual tal vez no consista de todas las posiciones entre los apuntadores inicio Lexema y avance Siempre indicamos un estado de aceptación mediante un círculo doble, y si hay que realizar una acción (por lo general, devolver un token a )

Upload: hugo-alberto-rivera-diaz

Post on 12-Apr-2017

20 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Diagrama de transición de estados

Diagrama de Transición de Estados.Como paso intermedio en la construcción de un analizador léxico, primero convertimos los patrones en diagramas de flujo estilizados, a los cuales se les llama “diagramas de transición de estados”.

Los diagramas de transición de estados tienen una colección de nodos o círculos, llamados estados. Cada estado representa una condición que podría ocurrir durante el proceso de explorar la entrada, buscando un lexema que coincida con uno de varios patrones. Podemos considerar un estado como un resumen de todo lo que debemos saber acerca de los caracteres que hemos visto entre el apuntador inicio Lexema y el apuntador avance.

Las Líneas se dirigen de un estado a otro del diagrama de transición de estados. Cada línea se etiqueta mediante un símbolo o conjunto de símbolos. Si nos encontramos en cierto estado s, y el siguiente símbolo de entrada es a, buscamos una línea que salga del estado 5 y este etiquetado por a (y tal vez por otros símbolos también). Si encontramos dicha línea, avanzamos el apuntador avance y entramos al estado del diagrama de transición de estados al que nos lleva esa línea. Asumiremos que todos nuestros diagramas de transición de estados son deterministas, lo que significa que nunca hay más de una línea que sale de un estado dado, con un símbolo dado de entre sus etiquetas Algunas convenciones importantes de los diagramas de transición de estados son:

1. Se dice que ciertos estados son de aceptación, o finales. Estos estados indican que se ha encontrado un lexema, aunque el lexema actual tal vez no consista de todas las posiciones entre los apuntadores inicio Lexema y avance Siempre indicamos un estado de aceptación mediante un círculo doble, y si hay que realizar una acción (por lo general, devolver un token y un valor de atributo al analizador sintáctico), la adjuntaremos al estado de aceptación.

2. Además, si es necesario retroceder el apuntador avance una posición (es decir, si el lexema no incluye el símbolo que nos llevó al estado de aceptación), entonces deberemos colocar de manera adicional un * cerca del estado de aceptación. En nuestro ejemplo, nunca es necesario retroceder a avance más de una posición, pero si lo fuera, podríamos adjuntar cualquier número de *s al estado de aceptación.

3. Un estado se designa como el estado inicial; esto se indica mediante una línea etiquetada como “inicio”, que no proviene de ninguna parte. El diagrama de transición siempre empieza en el estado inicial, antes de leer cualquier símbolo de entrada.

a )

AutómataDel

Lenguaje

1

Page 2: Diagrama de transición de estados

En la figura anterior y en la de esta página podemos observar lo que es nuestro diagrama de transición de estados aplicado a nuestro lenguaje de programación, específicamente en cuanto a operadores se refiere.

Estos ya fueron vistos en al gramática y tabal de Tokens propia del lenguaje, cada uno con una función específica. Nuestro analizador léxico va leyendo token por token dada las secuencias de nuestro autómata, actuando este como un reglamento que se debe seguir para la ejecución correcta del programa.

b )

2

3

4

5

Page 3: Diagrama de transición de estados

El reconocimiento de las palabras reservadas y los identificadores presenta un problema. Por lo general, las palabras clave como i f o then son reservadas, por lo que no son identificadores, aun cuando lo parecen. Así, aunque por lo general usamos un diagrama de transición de estados para buscar lexemas de identificadores, este diagrama también reconocerá las palabras claves y de operaciones aritméticas que hemos declarado en este documento previamente.

c )

6

7

8

Page 4: Diagrama de transición de estados

Hay dos formas en las que podemos manejar las palabras reservadas que parecen identificadores:

1. Instalar las palabras reservadas en la tabla de símbolos desde el principio. Un campo dela entrada en la tabla de símbolos indica que estas cadenas nunca serán identificadores ordinarios, y nos dice qué token representan.

2. Crear diagramas de transición de estados separados para cada palabra clave;

d )

9

10

11

12

13

Page 5: Diagrama de transición de estados

e )

14

Page 6: Diagrama de transición de estados

f )

Page 7: Diagrama de transición de estados

g )

Page 8: Diagrama de transición de estados

h )

16

Page 9: Diagrama de transición de estados

i )

17

Page 10: Diagrama de transición de estados

Hay varias formas en las que pueden utilizarse los diagramas de transición de estados

para construir un analizador léxico. Sin importar la estrategia general, cada estado se

representa mediante una pieza de código.

Podemos imaginar una variable estado que contiene el número del estado actual para un

diagrama de transición de estados. Una instrucción Switch con base en el valor de

estado nos lleva al código para cada uno de los posibles estados, en donde encontramos

la acción de ese estado.

A menudo, el código para un estado es en sí una instrucción Switch o una bifurcación

de varias vías que determina el siguiente estado mediante el proceso de leer y examinar

el siguiente carácter de entrada.

Ejemplo:

El método preferido, y el que vamos a usar en las siguientes secciones, es combinar

todos los diagramas de transición de estados en uno solo. Permitimos que el diagrama

de transición de estados lea la entrada hasta que no haya un siguiente estado posible, y

después tomamos el lexema más largo que haya coincidido con algún patrón.

En las siguientes secciones se mostrara la aplicación de nuestro diagrama de estados al

momento de hacer concretamente nuestro analizador léxico utilizando JFlex. El modo

en que este va a analizando token por token hasta encontrar ya sea un error o el permiso

gramatical que da nuestras declaraciones anteriores para seguir ejecutándose.

j )