SlideShare una empresa de Scribd logo
Unidad 5
LENGUAJES Y AUTOMATAS
Análisis léxico (Scanner)
La fase de rastreo (scanner), tiene las funciones de leer el programa fuente como un archivo de
caracteres y dividirlo en tokens . Los tokens son las palabras reservadas de un lenguaje, secuencia
de caracteres que representa una unidad de información en el programa fuente. En cada caso un
token representa un cierto patrón de caracteres que el analizador léxico reconoce, o ajusta desde
el inicio de los caracteres de entrada. De tal manera es necesario generar un mecanismo
computacional que nos permita identificar el patrón de transición entre los caracteres de entrada,
generando tokens, que posteriormente serán clasificados. Este mecanismo es posible crearlo a
partir de un tipo especifico de maquina de estados llamado autómata finito.
Función del analizador léxico
Es la primera fase de un compilador. 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:
o Palabras reservadas: if , while , do , …
o Identificadores: variables, funciones, tipos definidos por el usuario, etiquetas, …
o Operadores: =, >, <, >= , <= , +, *, …
o Símbolos especiales: ;, ( ) , { } , …
o Constantes numéricas. literales que representan valores enteros y flotantes. o Constantes de
carácter: literales que representan cadenas de caracteres.
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. Los componentes
léxicos son los símbolos terminales de la gramática. Suele implementarse como una subrutina del
analizador sintáctico. Cuando recibe la orden “obtén el siguiente componente léxico”, el analizador
léxico lee los caracteres de entrada hasta identificar el siguiente componente léxico.
Unidad 5
LENGUAJES Y AUTOMATAS
Además el analizador léxico es responsable de:
o Manejo de apertura y cierre de archivo, lectura de caracteres y gestión de posibles errores de
apertura.
o Eliminar comentarios, espacios en blanco, tabuladores y saltos de línea.
o Inclusión de archivos y macros.
o Contabilizar número de líneas y columnas para emitir mensajes de error.
Una de las ventajas de separar el análisis léxico y análisis sintáctico es que facilita la
transportabilidad del traductor si se decide realizar cambios posteriores, por ejemplo cambiar las
etiquetas begin-end por llaves de apertura y cierre { } .
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.
• componente léxico 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.
• 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).
Ejemplo de una cadena de código: const pi = 3.1416;
El analizador léxico recoge información sobre los componentes léxicos en sus atributos asociados.
Los tokens influyen en las decisiones del análisis sintáctico, y los atributos, en la traducción de los
tokens. En la practica los componentes léxicos suelen tener solo un atributo. Para efectos de
diagnostico, puede considerarse tanto el lexema para un identificador como el numero de línea en
el que se encontró por primera vez. Esta información puede ser almacenada en la tabla de símbolos
para el identificador (estructura de datos).
Para la cadena E=M*C**2 de ejemplo, los componentes léxicos y los valores de atributo asociado
son:
Unidad 5
LENGUAJES Y AUTOMATAS
Tome en cuenta que ciertas parejas no necesitan un valor de atributo. Los atributos relacionados
con ese token deberán ser conservados y transferidos a alguna estructura de datos para que sean
empleados en las siguientes etapas del análisis
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”.
Hay veces en que el analizador léxico necesita analizar previamente varios caracteres, además del
lexema para un patrón, antes de poder anunciar una concordancia. Se pueden emplear muchos
esquemas de manejos de buffer , pero, aquí tan solo se señalarán algunos principios básicos.
Parejas de buffer – 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.
Se mantienen dos apuntadores en el buffer de entrada. La cadena de caracteres entre los dos
apuntadores es el lexema en curso. Al principio, los dos apuntadores apuntan al primer carácter del
próximo lexema que hay que encontrar. Uno de ellos, apuntador delantero, examina hacia adelante
hasta encontrar una concordancia con un patrón. Una vez determinado el siguiente lexema, el
apuntador delantero se coloca en el carácter de su extremo derecho. Después de haber procesado
Unidad 5
LENGUAJES Y AUTOMATAS
el lexema, ambos apuntadores se colocan en el carácter situado inmediatamente después del
lexema. Con este esquema se pueden considerar los comentarios y los espacios en blanco como
patrones que no producen componentes léxicos.
Centinela – Corrigiendo la deficiencia del método anterior para reducir la necesidad de dos pruebas
para cada avance del apuntador delantero. Se amplia cada mitad del buffer para admitir un carácter
centinela al final. De esta manera se vuelve mas eficiente el proceso de cargar del buffer, realizando
una carga en cada mitad.
El manejo de buffer es una labor puramente de programación y se recomienda realizarla de la
manera que resulte mas sencilla, no es necesario apegarse a alguno de los dos métodos antes
mencionados.
Especificaciones de componentes léxicos
Las expresiones regulares son una notación importante para especificar patrones. Cada patrón
concuerda con una serie de cadenas que, de modo que las expresiones regulares servirán como
nombres para conjuntos de cadenas. El término alfabeto denota cualquier conjunto finito de
símbolos, por ejemplo el alfabeto binario { 0, 1 }. Una cadena es una secuencia de finita de símbolos
de un alfabeto y un lenguaje se refiere a conjunto de cadenas de un alfabeto fijo.
Reconocimiento de componentes léxico
Un reconocedor de lenguajes es un programa que toma como entrada una cadena x e indica si dicha
cadena pertenece a una frase del programa. Se compila una expresión regular en un reconocedor
construyendo un diagrama de transiciones generalizado llamado autómata finito. Un autómata
finito puede ser determinista o no determinista, dependiendo del número de transiciones para un
mismo símbolo de entrada. Tanto los autómatas finitos deterministas como los no deterministas
pueden reconocer con precisión a los conjuntos regulares. Por tanto, ambos pueden reconocer con
precisión lo que denotan las expresiones regulares.

Más contenido relacionado

La actualidad más candente

Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
Areli Gómez
 
Compiladores
CompiladoresCompiladores
Compiladores
Calzada Meza
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
Guillermo
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
Anel Sosa
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
Eduardo Chavez Vasquez
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1
Germania Rodriguez
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
perlallamas
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.
Yamilee Valerio
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
Pablo Guerra
 
Compiladores, Analisis Lexico
Compiladores, Analisis LexicoCompiladores, Analisis Lexico
Compiladores, Analisis Lexico
Pedro Antonio Villalta (Pavillalta)
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
Anel Sosa
 
Tipos de Autómatas 
Tipos de Autómatas Tipos de Autómatas 
Tipos de Autómatas 
yelizabeth_20
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
YESENIA CETINA
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No Deterministicos
Rosviannis Barreiro
 
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo MinilenguajeCompiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Pedro Antonio Villalta (Pavillalta)
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
Brayhan Acosta
 
Lenguajes libre de contexto
Lenguajes libre de contextoLenguajes libre de contexto
Lenguajes libre de contexto
Verónica Es'Loo
 
Autómatas de Pila
Autómatas de PilaAutómatas de Pila
Autómatas de Pila
Pablo Guerra
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
Blanca Rodríguez
 
Mecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosMecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmos
Abimael hernandez
 

La actualidad más candente (20)

Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Compiladores, Analisis Lexico
Compiladores, Analisis LexicoCompiladores, Analisis Lexico
Compiladores, Analisis Lexico
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
 
Tipos de Autómatas 
Tipos de Autómatas Tipos de Autómatas 
Tipos de Autómatas 
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No Deterministicos
 
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo MinilenguajeCompiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Lenguajes libre de contexto
Lenguajes libre de contextoLenguajes libre de contexto
Lenguajes libre de contexto
 
Autómatas de Pila
Autómatas de PilaAutómatas de Pila
Autómatas de Pila
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Mecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosMecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmos
 

Similar a Analisis lexico automatas i

Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
Silvestre Sosa
 
Análisis lexicográfico
Análisis lexicográficoAnálisis lexicográfico
Análisis lexicográfico
Eraclio Castillo Vidal
 
Lexicos.docx
Lexicos.docxLexicos.docx
Lexicos.docx
LuisGuillermoLpezFer
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
Yesenia Perez
 
investigacion.pdf
investigacion.pdfinvestigacion.pdf
investigacion.pdf
UlicesPerez1
 
Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemas
JESSIKADG86
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
maryr_
 
Compilador2
Compilador2Compilador2
Compilador2
Calzada Meza
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
Alvaro Cedeño
 
Análisis Sintáctico
Análisis SintácticoAnálisis Sintáctico
Análisis Sintáctico
Alex Echeverría
 
Compiladores
CompiladoresCompiladores
Compiladores
Chocolatisima Cruperz
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador Sintáctico
Raul Gomez
 
diaposichap.pptx
diaposichap.pptxdiaposichap.pptx
diaposichap.pptx
LuisSimn12
 
lexico.pptx
lexico.pptxlexico.pptx
lexico.pptx
AhiezerMorales
 
Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxico
FARIDROJAS
 
Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2
Universidad
 
Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019
DanielRosero23
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
Infomania pro
 
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptxActividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
YahirSnchezDjMix
 
Trabajo maxi unidad i
Trabajo maxi unidad iTrabajo maxi unidad i
Trabajo maxi unidad i
Eduardo Lastra Galeana
 

Similar a Analisis lexico automatas i (20)

Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
Análisis lexicográfico
Análisis lexicográficoAnálisis lexicográfico
Análisis lexicográfico
 
Lexicos.docx
Lexicos.docxLexicos.docx
Lexicos.docx
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
investigacion.pdf
investigacion.pdfinvestigacion.pdf
investigacion.pdf
 
Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemas
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Compilador2
Compilador2Compilador2
Compilador2
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Análisis Sintáctico
Análisis SintácticoAnálisis Sintáctico
Análisis Sintáctico
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador Sintáctico
 
diaposichap.pptx
diaposichap.pptxdiaposichap.pptx
diaposichap.pptx
 
lexico.pptx
lexico.pptxlexico.pptx
lexico.pptx
 
Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxico
 
Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2Introducción a los compiladores - Parte 2
Introducción a los compiladores - Parte 2
 
Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
 
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptxActividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
 
Trabajo maxi unidad i
Trabajo maxi unidad iTrabajo maxi unidad i
Trabajo maxi unidad i
 

Último

PROGRAMA DE FEXTICUM 2024 MONSEFÚ - PERÚ.pdf
PROGRAMA DE  FEXTICUM 2024 MONSEFÚ - PERÚ.pdfPROGRAMA DE  FEXTICUM 2024 MONSEFÚ - PERÚ.pdf
PROGRAMA DE FEXTICUM 2024 MONSEFÚ - PERÚ.pdf
Monsefú Perú
 
Presentación ley 21.643 Ley Karin asociación chilena de segruidad
Presentación ley 21.643 Ley Karin asociación chilena de segruidadPresentación ley 21.643 Ley Karin asociación chilena de segruidad
Presentación ley 21.643 Ley Karin asociación chilena de segruidad
EmilioSotoContreras
 
1. Texto de estudio. Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf
1. Texto de estudio.  Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf1. Texto de estudio.  Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf
1. Texto de estudio. Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf
evercarhuaricra09
 
Charla pre bautismal a papás y padrinos
Charla pre bautismal  a papás y padrinosCharla pre bautismal  a papás y padrinos
Charla pre bautismal a papás y padrinos
FranciscoBurguera1
 
TRANSFORMACIÓN DIGITAL - Transformación digital
TRANSFORMACIÓN DIGITAL - Transformación digitalTRANSFORMACIÓN DIGITAL - Transformación digital
TRANSFORMACIÓN DIGITAL - Transformación digital
OliviaGalgo
 
Ética bíblica cristiana [Autoguardado].pptx
Ética bíblica cristiana [Autoguardado].pptxÉtica bíblica cristiana [Autoguardado].pptx
Ética bíblica cristiana [Autoguardado].pptx
OswaldoLpez13
 
Programa FEXTICUM 2024 .
Programa FEXTICUM 2024                 .Programa FEXTICUM 2024                 .
Programa FEXTICUM 2024 .
Monsefú Perú
 

Último (7)

PROGRAMA DE FEXTICUM 2024 MONSEFÚ - PERÚ.pdf
PROGRAMA DE  FEXTICUM 2024 MONSEFÚ - PERÚ.pdfPROGRAMA DE  FEXTICUM 2024 MONSEFÚ - PERÚ.pdf
PROGRAMA DE FEXTICUM 2024 MONSEFÚ - PERÚ.pdf
 
Presentación ley 21.643 Ley Karin asociación chilena de segruidad
Presentación ley 21.643 Ley Karin asociación chilena de segruidadPresentación ley 21.643 Ley Karin asociación chilena de segruidad
Presentación ley 21.643 Ley Karin asociación chilena de segruidad
 
1. Texto de estudio. Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf
1. Texto de estudio.  Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf1. Texto de estudio.  Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf
1. Texto de estudio. Módulo 2 Tema 4 - Notificación de visita al hogar_VF.pdf
 
Charla pre bautismal a papás y padrinos
Charla pre bautismal  a papás y padrinosCharla pre bautismal  a papás y padrinos
Charla pre bautismal a papás y padrinos
 
TRANSFORMACIÓN DIGITAL - Transformación digital
TRANSFORMACIÓN DIGITAL - Transformación digitalTRANSFORMACIÓN DIGITAL - Transformación digital
TRANSFORMACIÓN DIGITAL - Transformación digital
 
Ética bíblica cristiana [Autoguardado].pptx
Ética bíblica cristiana [Autoguardado].pptxÉtica bíblica cristiana [Autoguardado].pptx
Ética bíblica cristiana [Autoguardado].pptx
 
Programa FEXTICUM 2024 .
Programa FEXTICUM 2024                 .Programa FEXTICUM 2024                 .
Programa FEXTICUM 2024 .
 

Analisis lexico automatas i

  • 1. Unidad 5 LENGUAJES Y AUTOMATAS Análisis léxico (Scanner) La fase de rastreo (scanner), tiene las funciones de leer el programa fuente como un archivo de caracteres y dividirlo en tokens . Los tokens son las palabras reservadas de un lenguaje, secuencia de caracteres que representa una unidad de información en el programa fuente. En cada caso un token representa un cierto patrón de caracteres que el analizador léxico reconoce, o ajusta desde el inicio de los caracteres de entrada. De tal manera es necesario generar un mecanismo computacional que nos permita identificar el patrón de transición entre los caracteres de entrada, generando tokens, que posteriormente serán clasificados. Este mecanismo es posible crearlo a partir de un tipo especifico de maquina de estados llamado autómata finito. Función del analizador léxico Es la primera fase de un compilador. 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: o Palabras reservadas: if , while , do , … o Identificadores: variables, funciones, tipos definidos por el usuario, etiquetas, … o Operadores: =, >, <, >= , <= , +, *, … o Símbolos especiales: ;, ( ) , { } , … o Constantes numéricas. literales que representan valores enteros y flotantes. o Constantes de carácter: literales que representan cadenas de caracteres. 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. Los componentes léxicos son los símbolos terminales de la gramática. Suele implementarse como una subrutina del analizador sintáctico. Cuando recibe la orden “obtén el siguiente componente léxico”, el analizador léxico lee los caracteres de entrada hasta identificar el siguiente componente léxico.
  • 2. Unidad 5 LENGUAJES Y AUTOMATAS Además el analizador léxico es responsable de: o Manejo de apertura y cierre de archivo, lectura de caracteres y gestión de posibles errores de apertura. o Eliminar comentarios, espacios en blanco, tabuladores y saltos de línea. o Inclusión de archivos y macros. o Contabilizar número de líneas y columnas para emitir mensajes de error. Una de las ventajas de separar el análisis léxico y análisis sintáctico es que facilita la transportabilidad del traductor si se decide realizar cambios posteriores, por ejemplo cambiar las etiquetas begin-end por llaves de apertura y cierre { } . 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. • componente léxico 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. • 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). Ejemplo de una cadena de código: const pi = 3.1416; El analizador léxico recoge información sobre los componentes léxicos en sus atributos asociados. Los tokens influyen en las decisiones del análisis sintáctico, y los atributos, en la traducción de los tokens. En la practica los componentes léxicos suelen tener solo un atributo. Para efectos de diagnostico, puede considerarse tanto el lexema para un identificador como el numero de línea en el que se encontró por primera vez. Esta información puede ser almacenada en la tabla de símbolos para el identificador (estructura de datos). Para la cadena E=M*C**2 de ejemplo, los componentes léxicos y los valores de atributo asociado son:
  • 3. Unidad 5 LENGUAJES Y AUTOMATAS Tome en cuenta que ciertas parejas no necesitan un valor de atributo. Los atributos relacionados con ese token deberán ser conservados y transferidos a alguna estructura de datos para que sean empleados en las siguientes etapas del análisis 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”. Hay veces en que el analizador léxico necesita analizar previamente varios caracteres, además del lexema para un patrón, antes de poder anunciar una concordancia. Se pueden emplear muchos esquemas de manejos de buffer , pero, aquí tan solo se señalarán algunos principios básicos. Parejas de buffer – 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. Se mantienen dos apuntadores en el buffer de entrada. La cadena de caracteres entre los dos apuntadores es el lexema en curso. Al principio, los dos apuntadores apuntan al primer carácter del próximo lexema que hay que encontrar. Uno de ellos, apuntador delantero, examina hacia adelante hasta encontrar una concordancia con un patrón. Una vez determinado el siguiente lexema, el apuntador delantero se coloca en el carácter de su extremo derecho. Después de haber procesado
  • 4. Unidad 5 LENGUAJES Y AUTOMATAS el lexema, ambos apuntadores se colocan en el carácter situado inmediatamente después del lexema. Con este esquema se pueden considerar los comentarios y los espacios en blanco como patrones que no producen componentes léxicos. Centinela – Corrigiendo la deficiencia del método anterior para reducir la necesidad de dos pruebas para cada avance del apuntador delantero. Se amplia cada mitad del buffer para admitir un carácter centinela al final. De esta manera se vuelve mas eficiente el proceso de cargar del buffer, realizando una carga en cada mitad. El manejo de buffer es una labor puramente de programación y se recomienda realizarla de la manera que resulte mas sencilla, no es necesario apegarse a alguno de los dos métodos antes mencionados. Especificaciones de componentes léxicos Las expresiones regulares son una notación importante para especificar patrones. Cada patrón concuerda con una serie de cadenas que, de modo que las expresiones regulares servirán como nombres para conjuntos de cadenas. El término alfabeto denota cualquier conjunto finito de símbolos, por ejemplo el alfabeto binario { 0, 1 }. Una cadena es una secuencia de finita de símbolos de un alfabeto y un lenguaje se refiere a conjunto de cadenas de un alfabeto fijo. Reconocimiento de componentes léxico Un reconocedor de lenguajes es un programa que toma como entrada una cadena x e indica si dicha cadena pertenece a una frase del programa. Se compila una expresión regular en un reconocedor construyendo un diagrama de transiciones generalizado llamado autómata finito. Un autómata finito puede ser determinista o no determinista, dependiendo del número de transiciones para un mismo símbolo de entrada. Tanto los autómatas finitos deterministas como los no deterministas pueden reconocer con precisión a los conjuntos regulares. Por tanto, ambos pueden reconocer con precisión lo que denotan las expresiones regulares.