SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
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

ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARESAnel Sosa
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1Germania Rodriguez
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador SintácticoPablo Guerra
 
automatas finitos
 automatas finitos automatas finitos
automatas finitosAnel Sosa
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientosaaronastorga4
 
Portafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitosPortafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitosHumano Terricola
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turingAnel Sosa
 
Análisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoAnálisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoangiepao1717
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasJosé Antonio Sandoval Acosta
 
Los lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turingLos lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turingJonathan Bastidas
 

La actualidad más candente (20)

ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARES
 
TABLA DE SÍMBOLOS
TABLA DE SÍMBOLOSTABLA DE SÍMBOLOS
TABLA DE SÍMBOLOS
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Analisis Semantico
Analisis Semantico Analisis Semantico
Analisis Semantico
 
Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientos
 
Portafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitosPortafolio lenguajes y automatas unidad 3 - Autómatas finitos
Portafolio lenguajes y automatas unidad 3 - Autómatas finitos
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
 
Análisis léxico y análisis sintáctico
Análisis léxico y análisis sintácticoAnálisis léxico y análisis sintáctico
Análisis léxico y análisis sintáctico
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Unidad1 2 Lenguajes y automatas
Unidad1 2  Lenguajes y automatasUnidad1 2  Lenguajes y automatas
Unidad1 2 Lenguajes y automatas
 
macros Lenguaje ensamblador
macros Lenguaje ensambladormacros Lenguaje ensamblador
macros Lenguaje ensamblador
 
Compiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico ConceptosCompiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico Conceptos
 
UNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓNUNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓN
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Tutorial de JFLAP
Tutorial de JFLAPTutorial de JFLAP
Tutorial de JFLAP
 
Los lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turingLos lenguajes aceptados para una maquina de turing
Los lenguajes aceptados para una maquina de turing
 

Similar a Analisis lexico automatas i

Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemasJESSIKADG86
 
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_
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
Analizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoAnalizador Léxico, Analizador Sintáctico
Analizador Léxico, Analizador SintácticoRaul Gomez
 
diaposichap.pptx
diaposichap.pptxdiaposichap.pptx
diaposichap.pptxLuisSimn12
 
Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxicoFARIDROJAS
 
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 2Universidad
 
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 2019DanielRosero23
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semanticoInfomania 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.pptxYahirSnchezDjMix
 

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

412414553-La-Globalizacion-en-El-Arte.pptx
412414553-La-Globalizacion-en-El-Arte.pptx412414553-La-Globalizacion-en-El-Arte.pptx
412414553-La-Globalizacion-en-El-Arte.pptxAndresSantana60
 
Diapositiva del JUICIO VALORATIVO - 2024
Diapositiva del JUICIO VALORATIVO - 2024Diapositiva del JUICIO VALORATIVO - 2024
Diapositiva del JUICIO VALORATIVO - 2024KellySue4
 
S.3 El debate Impacto de la Inteligencia Artificial en la Sociedad Moderna
S.3 El debate Impacto de la Inteligencia Artificial en la Sociedad ModernaS.3 El debate Impacto de la Inteligencia Artificial en la Sociedad Moderna
S.3 El debate Impacto de la Inteligencia Artificial en la Sociedad ModernaRodrigoReynaldo1
 
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universoCURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universoanoiteenecesaria
 
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na CoruñaCURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruñaanoiteenecesaria
 
GESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptx
GESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptxGESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptx
GESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptxCarlosRizos
 

Último (6)

412414553-La-Globalizacion-en-El-Arte.pptx
412414553-La-Globalizacion-en-El-Arte.pptx412414553-La-Globalizacion-en-El-Arte.pptx
412414553-La-Globalizacion-en-El-Arte.pptx
 
Diapositiva del JUICIO VALORATIVO - 2024
Diapositiva del JUICIO VALORATIVO - 2024Diapositiva del JUICIO VALORATIVO - 2024
Diapositiva del JUICIO VALORATIVO - 2024
 
S.3 El debate Impacto de la Inteligencia Artificial en la Sociedad Moderna
S.3 El debate Impacto de la Inteligencia Artificial en la Sociedad ModernaS.3 El debate Impacto de la Inteligencia Artificial en la Sociedad Moderna
S.3 El debate Impacto de la Inteligencia Artificial en la Sociedad Moderna
 
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universoCURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
CURSO DE INICIACIÓN Á ASTRONOMÍA: O noso lugar no universo
 
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na CoruñaCURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
CURSO DE INICIACIÓN Á ASTRONOMÍA Eclipses na Coruña
 
GESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptx
GESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptxGESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptx
GESTOS Y POSTURAS EN LA MISA PARA LOS MONAGUILLOS.pptx
 

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.