Vous êtes sur la page 1sur 5

Análisis Léxico

Aplicaciones (caso de estudio)

Además de para construir compiladores e intérpretes, los analizadores


léxicos se pueden emplear para muchos programas \convencionales”. Los
ejemplos más claros son aquellos programas que tienen algún tipo de
entrada de texto donde hay un formato razonablemente libre en cuantos
espacios y comentarios. En estos casos es bastante engorroso controlar
donde empieza y termina cada componente y es fácil liarse con los punteros
a char. Un analizador léxico simplifica notablemente
la interfaz y si se dispone de un generador automático, el problema se
resuelve en pocas líneas de código.
El análisis léxico es una técnica que se encuentra basada en un conjunto de
reglas que relacionan un conjunto de partes para formar un CPU. Un
analizador léxico es la primera fase de un compilador consiste en un
programa que recibe el código fuente de otro programa y produce una salida
compuesta en tokens o símbolos. Estos tokens sirven para una posterior
etapa del proceso de traducción, siendo la entrada del analizador sintáctico.
Algunas aplicaciones de los analizadores léxicos son:
 El analizador léxico divide la entrada en componentes léxicos.
 Los componentes se agrupan en categorías léxicas.
 Asociamos atributos a las categorías léxicas.
 Especificamos las categorías mediante expresiones regulares.
 Para reconocer los lenguajes asociados a las expresiones regulares
empleamos autómatas de estados finitos(AFD).
 se pueden crear los AFD directamente a partir de la expresión regular.
 El analizador léxico utiliza la maquina discriminadora determinista.
 El tratamiento de errores en nivel léxico es muy simple.
 Se pueden emplear las ideas de los analizadores léxicos para facilitar
el tratamiento de ficheros de texto.
como conclusión los analizadores léxicos son una aplicación de los
compiladores que se encargan de verificar que el texto este escrito en un
formato aceptado para todo el programa que está escrito en un lenguaje de
programación al igual que se encarga de verificar que tenga congruencia, los
analizadores léxicos sirven en gran parte para resolver problemas que
pueden surgir a causa de que el programa no tenga congruencia o no esté
bien estructurado.

Eliminación de la ambigüedad
Una gramática es ambigua si puede generar una secuencia de símbolos
con dos árboles sintácticos diferentes. Una gramática ambigua puede
rescribirse para eliminar la ambigüedad.
Una GLC es ambigua si existe una cadena w Є L(G) que tiene más de una
derivación por la izquierda o más de una derivación por la derecha o si
tiene dos o más arboles de derivación .
En casi de y que toda cadena w Є L (G) tenga un único árbol de derivación
no es ambigua.
Ejemplo: La gramática S → aS| Sa | a es ambigua porque aa tiene dos
derivaciones por la izquierda S Þ aS Þ aa S Þ Sa Þ aa.
Tipos de Ambigüedad
Dentro del estudio de gramáticas existen dos tipos fundamentales de
ambigüedad, los cuales son:

Ambigüedad Inherente:
Las gramáticas que presentan este tipo de ambigüedad no pueden utilizarse
para lenguajes de programación, ya que por más transformaciones que se
realicen sobre ellas, nunca se podrá eliminar completamente la ambigüedad
que presentan:
Un lenguaje L es inherentemente ambiguo si todas sus gramáticas; si existe
cuando menos una gramática no ambigua para L, L no es ambiguo.
 El lenguaje de las expresiones no es Ambiguo
 Las expresiones regulares no son ambiguas

Ejemplo de un lenguaje inherentemente ambiguo:

La gramática es ambigua: hay cadenas con más de una derivación más


izquierda:
Ambigüedad Transitoria:
Este tipo de ambigüedad puede llegar a ser eliminada realizando una serie
de transformaciones sobre la gramática original. Una vez que se logra lo
anterior, la gramática queda lista para ser reconocida por la mayor parte de
los analizadores sintácticos. (Se le considera "ambigüedad" porque existen
métodos para realizar análisis sintáctico que no aceptan gramáticas con
estas características)
Dónde se presenta la Ambigüedad Transitoria generalmente la ambigüedad
se presenta cuando existen producciones con factores comunes (distintas
alternativas para un símbolo no-terminal que inician de la misma forma); ó
cuando existen producciones que son recursivas izquierdas (producciones
para un símbolo no-terminal en las cuales el primer símbolo de su forma
sentencial es ese mismo símbolo no-terminal).

¿Cómo solucionar el problema de la Ambigüedad Transitoria?

Para eliminar este tipo de ambigüedad, es necesario, primero eliminar:


- Factores comunes izquierdos inmediatos y No-inmediatos.
- Recursividad izquierda inmediata y No-inmediata.

ELIMINACIÓN DE LA AMBIGÜEDAD.

– No existe un algoritmo que nos indique si una GIC es ambigua


– Existen LIC que sólo tienen GIC ambiguas: inherentemente ambiguos
– Para las construcciones de los lenguajes de programación comunes
existen técnicas para la eliminación de la ambigüedad
– Ejemplo: causas de ambigüedad en la siguiente gramática
• No se respeta la precedencia de operadores
• una secuencia de operadores idénticos puede agruparse desde la
izquierda y desde la derecha. Lo convencional es agrupar desde la
izquierda.
Una gramática es ambigua si existe una cadena w ∈ L(G) que tiene más de
una derivación por la izquierda o más de una derivación por la derecha o si
tiene dos o más árboles de derivación.
En caso de que toda cadena w ∈ L(G) tenga un único árbol de derivación,
la gramática es no ambigua

Eliminar la ambigüedad en gramáticas


• Eliminar la ambigüedad en una gramática requiere de un proceso de
análisis propio de cada gramática que verifique que para ninguna palabra
que esta genera se puedan generar más de un árbol de derivación.
• En algunos casos, la ambigüedad de una gramática se puede eliminar
utilizando nuevas variables que eliminen los árboles de derivación no
deseados.
• También existen los lenguajes inherentemente ambiguos para los que no
existe una gramática no ambigua equivalente

Vous aimerez peut-être aussi