Transcript Construcción de un Diagrama de transición de estados
Slide 1
Análisis léxico: Creación del
automata
1
Prácticas EDI - © Juan Ramón Pérez
Slide 2
Análisis de los tokens
Trabajamos en el análisis del fichero a un nivel más alto.
Queremos pasar de tratar con caracteres (como hace
buffer) a tratar con palabras (léxico).
Técnicamente en un lenguaje de ordenadores las palabras
se denominan tokens.
2
Prácticas EDI - © Juan Ramón Pérez
Slide 3
Autómatas finitos
Dispositivo para procesar palabras pertenecientes a un
lenguaje regular.
Se construyen siguiendo las reglas de formación de
palabras de un lenguaje: recibe una palabra y determina si
pertenece o no al lenguaje, es decir, si sigue las reglas
3
Prácticas EDI - © Juan Ramón Pérez
Slide 4
Diagrama de transición de estados
Diagrama de transición de estados para analizar los
tokens de XML simple:
Estados, los representamos con números.
Transiciones, están provocadas por la lectura de un carácter.
Estados finales, cuando hemos reconocido un token.
<
4
Prácticas EDI - © Juan Ramón Pérez
1
Slide 5
Análisis léxico para XML simple
Vamos a realizar un analizador genérico para
cualquier fichero XML simple.
Tipos de tokens:
5
Algunos serán literales, palabras reservadas: <, >, …
Agenda, contacto, nombre, valor… los consideramos todos
como identificadores, no como palabras reservadas.
"ana“, "685934832“, "pedro“… los consideramos como
cadenas.
Prácticas EDI - © Juan Ramón Pérez
Slide 6
Pasos para crear un Autómata
finito para XML simple (I)
Descubrir que tokens debemos analizar:
6
Coger la especificación de XML simple y ejemplos de fichero.
¿Qué tokens tiene (literales, no literales)?
Hacer una tabla con estos tokens y un código numérico.
Prácticas EDI - © Juan Ramón Pérez
Slide 7
Pasos para crear un Autómata
finito para XML simple (y II)
Crear el diagrama de transición de estados para XML.
7
Tenemos un único estado inicial, en el que empezamos el
análisis de todos los tokens.
Tenemos un estado final por cada token.
Las transiciones entre estados vendrán dadas por los
caracteres leídos.
Prácticas EDI - © Juan Ramón Pérez
Slide 8
Construcción del diagrama de
transición de estados
TOKEN_MAYOR
Carácter que
provoca la
transición
Estado final,
reconocemos token
2
>
Otros estados
1
letra, dígito, _
TOKEN_IDENTIFICADOR
Estado inicial
Cualquier
letra
8
letra, _
8
9
≠ letra, dígito, _
Prácticas EDI - © Juan Ramón Pérez
Hemos leído un
carácter de más
Estado final,
reconocemos token
Slide 9
Cómo examinamos los caracteres
Tenemos que examinar los caracteres y realizar las
transiciones correspondientes.
Habrá que ir extrayéndolos uno a uno del buffer.
Llamada a buffer.siguienteCaracter()
9
Prácticas EDI - © Juan Ramón Pérez
Slide 10
Cómo reconocemos tokens tienen
caracteres en común
Por ejemplo ‘<‘ y ‘’.
Parece que para el primer token va a sobrar un
carácter, es decir, el carácter que leemos en realidad
pertenece al siguiente token.
Ejemplo: Por tanto, habrá que retroceder en el buffer para
poder volver a procesarlo después.
Llamada a buffer.retroceder()
10
Prácticas EDI - © Juan Ramón Pérez
Slide 11
Analizar excepciones al
funcionamiento normal
¿Cómo tratamos los separadores?
¿Qué pasa cuando llega carácter que no existe en el
lenguaje?
¿Cómo reconocemos tokens que coinciden en sus
primeros caracteres?
¿Cómo indicamos que no hay más tokens para analizar?
11
Prácticas EDI - © Juan Ramón Pérez
Análisis léxico: Creación del
automata
1
Prácticas EDI - © Juan Ramón Pérez
Slide 2
Análisis de los tokens
Trabajamos en el análisis del fichero a un nivel más alto.
Queremos pasar de tratar con caracteres (como hace
buffer) a tratar con palabras (léxico).
Técnicamente en un lenguaje de ordenadores las palabras
se denominan tokens.
2
Prácticas EDI - © Juan Ramón Pérez
Slide 3
Autómatas finitos
Dispositivo para procesar palabras pertenecientes a un
lenguaje regular.
Se construyen siguiendo las reglas de formación de
palabras de un lenguaje: recibe una palabra y determina si
pertenece o no al lenguaje, es decir, si sigue las reglas
3
Prácticas EDI - © Juan Ramón Pérez
Slide 4
Diagrama de transición de estados
Diagrama de transición de estados para analizar los
tokens de XML simple:
Estados, los representamos con números.
Transiciones, están provocadas por la lectura de un carácter.
Estados finales, cuando hemos reconocido un token.
<
4
Prácticas EDI - © Juan Ramón Pérez
1
Slide 5
Análisis léxico para XML simple
Vamos a realizar un analizador genérico para
cualquier fichero XML simple.
Tipos de tokens:
5
Algunos serán literales, palabras reservadas: <, >, …
Agenda, contacto, nombre, valor… los consideramos todos
como identificadores, no como palabras reservadas.
"ana“, "685934832“, "pedro“… los consideramos como
cadenas.
Prácticas EDI - © Juan Ramón Pérez
Slide 6
Pasos para crear un Autómata
finito para XML simple (I)
Descubrir que tokens debemos analizar:
6
Coger la especificación de XML simple y ejemplos de fichero.
¿Qué tokens tiene (literales, no literales)?
Hacer una tabla con estos tokens y un código numérico.
Prácticas EDI - © Juan Ramón Pérez
Slide 7
Pasos para crear un Autómata
finito para XML simple (y II)
Crear el diagrama de transición de estados para XML.
7
Tenemos un único estado inicial, en el que empezamos el
análisis de todos los tokens.
Tenemos un estado final por cada token.
Las transiciones entre estados vendrán dadas por los
caracteres leídos.
Prácticas EDI - © Juan Ramón Pérez
Slide 8
Construcción del diagrama de
transición de estados
TOKEN_MAYOR
Carácter que
provoca la
transición
Estado final,
reconocemos token
2
>
Otros estados
1
letra, dígito, _
TOKEN_IDENTIFICADOR
Estado inicial
Cualquier
letra
8
letra, _
8
9
≠ letra, dígito, _
Prácticas EDI - © Juan Ramón Pérez
Hemos leído un
carácter de más
Estado final,
reconocemos token
Slide 9
Cómo examinamos los caracteres
Tenemos que examinar los caracteres y realizar las
transiciones correspondientes.
Habrá que ir extrayéndolos uno a uno del buffer.
Llamada a buffer.siguienteCaracter()
9
Prácticas EDI - © Juan Ramón Pérez
Slide 10
Cómo reconocemos tokens tienen
caracteres en común
Por ejemplo ‘<‘ y ‘’.
Parece que para el primer token va a sobrar un
carácter, es decir, el carácter que leemos en realidad
pertenece al siguiente token.
Ejemplo:
poder volver a procesarlo después.
Llamada a buffer.retroceder()
10
Prácticas EDI - © Juan Ramón Pérez
Slide 11
Analizar excepciones al
funcionamiento normal
¿Cómo tratamos los separadores?
¿Qué pasa cuando llega carácter que no existe en el
lenguaje?
¿Cómo reconocemos tokens que coinciden en sus
primeros caracteres?
¿Cómo indicamos que no hay más tokens para analizar?
11
Prácticas EDI - © Juan Ramón Pérez