Analizador léxico

27
Analizador Léxico

Transcript of Analizador léxico

Page 1: Analizador léxico

Analizador Léxico

Page 2: Analizador léxico

¿Qué es?El analizador lexico es una herramienta de

un compilador que nos ayuda a leer los caracteres de entrada para formar componentes y asi poder identificarlos y pasar la informacion a analizado sintáctico.

Page 3: Analizador léxico

ANÁLISIS LÉXICO EN PYTHON

En lugar de tratar de procesar un flujo de texto directamente, a menudo es más sencillo — y rápido — desglosar la entrada de texto en una serie de “tokens”, que deberían incluir palabras reservadas, literales, operadores y/o identificadores. Estos tokens pueden inspeccionarse por el procesador de forma más eficiente que un flujo de texto plano. El proceso de transformar la entra de texto en tokens se conoce como “análisis léxico”, “tokenizado” (“tokenizing”) o, simplemente, “escaneo” (“scanning”).

Page 4: Analizador léxico

El punto de entrada del analizador léxico es la unción PyTokenizer_Get en Parser/tokenizer.c. Esta función se llama repetidamente desde la función principal de procesado, parsetok en Parser/parsetok.c, que a su vez se utiliza por alguna de las distintas funciones de proceso de más alto nivel.

Page 5: Analizador léxico

Ejemplo:

/* Parser/Python.asdl:25 */

| For(expr target, expr iter, stmt* body, stmt* orelse)

| While(expr test, stmt* body, stmt* orelse)

| Unless(expr test, stmt* body)

| If(expr test, stmt* body, stmt* orelse)

Page 6: Analizador léxico
Page 7: Analizador léxico

¿Cuál es su función?

Su principal función consiste en leer la secuencia de caracteres del programa fuente, carácter a carácter, y elaborar como salida la secuencia de componentes léxicos que utiliza el analizador sintáctico. El analizador sintáctico emite la orden al analizador léxico para que agrupe los caracteres y forme unidades con significado propio llamados componentes léxicos (tokens). Los componentes léxicos representan:

Page 8: Analizador léxico

Palabras reservadas: if, while, do, … Identificadores: variables, funciones, tipos definidos por el usuario, etiquetas, … Operadores: =, >, <, >=, <=, +, *, … Símbolos especiales: ;, ( ), { }, … Constantes numéricas: literales que representan valores enteros y flotantes. Constantes de carácter: literales que representan cadenas de caracteres.

Page 9: Analizador léxico

El analizador léxico opera bajo petición del analizador sintáctico devolviendo un componente léxico conforme el analizador sintáctico lo va necesitando para avanzar en la gramática.

Page 10: Analizador léxico

Además el analizador léxico es responsable de:

Manejo de apertura y cierre de archivo, lectura de caracteres y gestión de posibles errores de apertura.

Eliminar comentarios, espacios en blanco, tabuladores y saltos de línea.

Inclusión de archivos y macros. Contabilizar número de líneas y columnas

para emitir mensajes de error.

Page 11: Analizador léxico

COMPONENTES LÉXICOS, PATRONES Y LEXEMAS

En la fase de análisis, los términos componentes léxicos (token), patrón y lexema se emplean con significados específicos. Un analizador léxico, inicialmente lee los lexemas y le asigna un significado propio.

Page 12: Analizador léxico

Componente léxico (token) es la secuencia lógica y coherente de caracteres relativo a una categoría: identificador, palabra reservada, literales (cadena/numérica), operador o carácter de puntuación, además de que un componente léxico puede tener uno o varios lexemas.

Ejemplo :• Identificadores• Enteros• Palabras reservadas• Espacios en blanco• Parentesis.

Page 13: Analizador léxico

Patrón es una regla que genera la secuencia de caracteres que puede representar a un determinado componente léxico (expresión regular).

Lexema es una cadena de caracteres que concuerda con un patrón que describe un componente léxico (valor de cadena).

Atributos el análisis léxico debe proporcionar información adicional sobre los tokens en sus atributos asociados. El número de atributos depende de cada token.

Page 14: Analizador léxico

MANEJO DE BUFFER DE ENTRADA Existen algunos aspectos de eficiencia relacionados con el manejo de buffer.Primero se menciona un esquema de doble buffer de entrada que resulta útil como pre-análisis de la entrada para identificar los componentes léxicos.El segundo esquema introduce algunas técnicas útiles para aumentar la eficiencia del analizador léxico, empleando “centinelas”.

Page 15: Analizador léxico

Se utiliza un buffer dividido en dos mitades de N (1024 ó 512) caracteres cada una, Se leen N caracteres de entrada en cada mitad del buffer con un orden de lectura del sistema, en vez de invocar una instrucción de lectura para cada carácter de entrada. Si quedan menos de N caracteres en la entrada, entonces se lee un carácter especial eof en el buffer después de los caracteres de entrada. Es decir, eof marca el final del archivo fuente y es distinto a cualquier carácter de la entrada.

Parejas de Buffer

Page 16: Analizador léxico

El origen de las expresiones regulares surge de la teoría de autómatas y la teoría de lenguajes formales, ambas parte de la ciencias computacionales teórica. Este campo estudia los modelos computacionales (autómata) y la manera de describir y clasificar los lenguajes formales. Un lenguaje formal puede ser especificado de varias maneras, tales como:

EXPRESIONES REGULARES

Page 17: Analizador léxico

Cadenas producidas por alguna gramática formal.

Cadenas producidas por expresiones regulares.

Cadenas aceptadas por algunos autómatas tales como las máquinas de Turing o autómatas de estado finito.

A las expresiones regulares frecuentemente se les llaman patrones, ya que son expresiones que describen a un conjunto de cadenas.

Page 18: Analizador léxico

Una expresión regular denota un conjunto de secuencias de símbolos válidas que se construyen en base al alfabeto de un lenguaje. Generalmente estos conjuntos se representan como:

Page 19: Analizador léxico

Es una expresión regular que denota el conjunto vacío (el conjunto no contiene secuencias de símbolos).

Page 20: Analizador léxico

Es una expresión regular que denota al conjunto que contiene la secuencia vacía.

Page 21: Analizador léxico

AUTÓMATAS FINITOS

Una maquina de estado finito o autómata finito, es un modelo computacional que consiste de un conjunto de estados, un estado de inicio, un alfabeto de entrada y una función de transición que traza un mapa a un siguiente estado, a partir del símbolo de entrada y el estado actual.

Page 22: Analizador léxico

Los autómatas finitos se pueden utilizar para describir el proceso de reconocimiento de patrones en cadenas de entrada. El sistema recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que ese autómata reconoce. De esta manera se pueden construir analizadores léxicos, construyendo programas de computadora que realicen las operaciones de un autómata.

Page 23: Analizador léxico

AUTÓMATA FINITONO DETERMINÍSTICO

Un autómata finito no determinista (abreviado AFND) es un autómata finito que, a diferencia de los autómatas finitos deterministas (AFD), posee al menos un estado q Q, tal que para un símbolo a Σ ∈ ∈del alfabeto, existe más de una transición δ(q,a) posible.

Page 24: Analizador léxico

AUTÓMATA FINITODETERMINÍSTICO

Un autómata finito determinista (DFA por sus siglas en ingles), es un modelo donde el siguiente estado de la transición esta dado particularmente por el estado actual y el carácter de entrada actual. Si ningún estado de transición es especificado, la cadena entrante es rechazada.

Page 25: Analizador léxico

La siguiente definición formalmente introduce un DFA, ( S, Σ, T, s, A ) donde:

S conjunto finito no vacío de elementos llamado estados

Σ alfabeto de entrada

T es una función de transición de S × Σ en S s S ∈ estado inicial

A S ⊆ conjunto no vacío de estados finales

Page 26: Analizador léxico

DIAGRAMADE ANALIZADORES LÉXICOS

Page 27: Analizador léxico

MUCHAS GRACIAS POR SU

ATENCIÓN