Construcción de Analizador Léxico

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

TEORÍA DE COMPILADORES: CONSTRUCCIÓN DE ANALIZADOR LÉXICO

Construcción de analizador léxico

Teoría de Compiladores

Profesor: Willis Polanco

Sección: 01

José Germán 18-0200

Universidad Iberoamericana

22 de junio de 2020
CONSTRUCCIÓN DE ANALIZADOR LÉXICO

Investigar sobre los distintos tipos de herramientas para construir un analizador


léxico. Coloque sus ventajas y desventajas.

El uso y perfeccionamiento de los compiladores ha traído como consecuencia el

desarrollo de herramientas que aportan a la realización de los mismos, estas se han ido

especializando en las diferentes fases del proceso de compilación, brindándole a los

desarrolladores una gran cantidad de facilidades a la hora de diseñar e implementar un

compilador. En el mundo existen diversas herramientas de apoyo de este tipo,

desarrolladas en diferentes lenguajes de programación, las cuales responden a los

intereses de los múltiples sistemas operativos. Para realizar la construcción de un

analizador léxico se encuentran disponibles una gran cantidad de herramientas, de las

cuales algunas son compatibles entre sí. Veamos un listado con 4 de las más conocidas

para generar analizadores léxicos, adjunto de sus ventajas y sus desventajas.

Bison

Es un generador de analizadores sintácticos de propósito general que convierte

una descripción gramatical para una gramática independiente del contexto en un

programa en C que analice esa gramática. Es utilizado en un amplio rango de analizadores

de lenguajes, desde aquellos usados en simples calculadoras de escritorio hasta complejos

lenguajes de programación. (EcuRed, s.f)

Ventajas

Este tipo de analizadores ascendentes no tienen problemas con la recursividad

puesto que la forma en que se realiza el análisis, en general, da preferencias a la

recursividad izquierda ya que supone un uso más eficiente de la pila del analizador. No

obstante, esto genera un analizador eficiente, incluso más que los que pudiéramos hacer

2
CONSTRUCCIÓN DE ANALIZADOR LÉXICO

de manera manual, los analizadores ascendentes reconocen la mayor parte de los

lenguajes.

Deventajas

Las acciones semánticas asociadas con las producciones de los no terminales de

las gramáticas son difíciles de depurar. Igualmente, mezcla las especificaciones

sintácticas con las semánticas.

Flex

Es una herramienta para generar escáneres: programas que reconocen patrones

léxicos en un texto. Flex lee los ficheros de entrada dados, o la entrada estándar si no se

le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. Estas

herramientas de apoyo han sido reescritas para otros lenguajes, incluyendo Ratfor, EFL,

ML,Ada, Java, Python, y Limbo. De esta forma se ha logrado una mayor utilización de

las mismas en diferentes compiladores desarrollados sobre tecnologías libres. Teniendo

en cuenta las características de las aplicaciones antes mencionadas, se ha escogido para

la realización del compilador las herramientas Yacc y Lex. (EcuRed, s.f)

En muchos de los compiladores desarrollados en el mundo suelen ser utilizados

juntos. Yacc utiliza una gramática formal para analizar un flujo de entradas, algo que Lex

no puede hacer con expresiones regulares simples (Lex se limita a los autómatas de

estados finitos simples). Sin embargo, Yacc no puede leer en un flujo de entradas simple,

requiere una serie de símbolos. Lex se utiliza a menudo para proporcionar a Yacc estos

símbolos.

3
CONSTRUCCIÓN DE ANALIZADOR LÉXICO

Ventajas

• Ofrece dos maneras distintas de generar analizadores para usar con C++. Una de

ellas es simplemente compilar un analizador generado por flex usando un

compilador de C++ en lugar de un compilador de C.

• Se puede utilizar para generar un analizador como una clase de C++, utilizando

la opción ‘-+’

• Una alternativa de software libre a la lex.

Desventajas

• Algunos patrones de contexto posterior pueden no ser correctamente emparejados

y generar mensajes de aviso ("contexto posterior peligroso"). Estos son patrones

donde el final de la primera parte de la regla coincide con el comienzo de la

segunda parte, como "zx * / xy *".

• Para algunas reglas de contexto posterior, partes que están hechas de longitud fija

no se reconocen como tales, lo que lleva a la pérdida de rendimiento mencionada

anteriormente.

• La combinación de contexto posterior con el especial '|' acción puede producir que

el contexto posterior fijo se convirtió en el contexto posterior variable más caro.

• El uso de `unput () 'invalida yytext y yyleng, a menos que el`% array' se ha

utilizado directiva o la opción `-l '.

• Concordancia de patrones de NUL es sustancialmente más lento que el de otros

caracteres.

• El ajuste dinámico del buffer de entrada es lento, ya que conlleva el re análisis de

todo el texto hasta el momento por el (generalmente enorme) token actual.

4
CONSTRUCCIÓN DE ANALIZADOR LÉXICO

• Debido al tanto de buffers de entrada y lecturas por adelantado, no puede

entremezclar llamadas a <stdio.h> rutinas, tales como, por ejemplo, `getchar () ',

con flex reglas y esperar que funcione. Llame a `input () 'en su lugar.

• Las flex algoritmos internos necesitan documentación.

• Incompatibilidades con lex y POSIX.

Lex

Es un generador de analizador léxico, que sirve para generar los tokens para la

siguiente fase. La principal característica de Lex es que va a permitir asociar acciones

descritas en C, a la localización de las Expresiones Regulares que se hayan definido. Para

ello. Lex se apoya en una plantilla que recibe como parámetro, y que se debe diseñar con

cuidado. Internamente Lex va a actuar como un autómata que localizará las expresiones

regulares que se le describan, y una vez reconocida la cadena representada por dicha

expresión regular, ejecutará el código asociado a esa regla.

Coco / R

Es un generador de compilador que toma una con atributos Extended Backus-Naur

Form gramática (EBNF) de un idioma de origen y genera un escáner y un programa de

análisis para ese idioma. (Terry, 2005)

El escáner funciona como un autómata finito determinista. Es compatible con

Unicode caracteres en UTF-8 de codificación y se puede hacer entre mayúsculas y

minúsculas o mayúsculas y minúsculas. También puede reconocer fichas en función de

su contexto del lado derecho. Además de símbolos terminales el escáner también puede

reconocer pragmas, que son fichas que no son parte de la sintaxis, pero puede ocurrir en

5
CONSTRUCCIÓN DE ANALIZADOR LÉXICO

cualquier parte del flujo de entrada (por ejemplo, las directivas del compilador o

caracteres de fin de línea).

Hay versiones de Coco / R para la mayoría de las lenguas modernas (Java, C #, C

++, Pascal, Modula-2, Modula-3, Delphi, VB.NET, Python, Rubí y otros). Las versiones

más recientes de la Universidad de Linz son aquellos para C #, Java y C ++. Para la

versión de Java, hay un Eclipse plug-in y para C #, Visual Studio un plug-in. También

hay gramáticas de muestra para Java y C #.

Coco / R fue desarrollado originalmente en la ETHZ y se trasladó con Hanspeter

Mössenböck [ de] a Universidad de Linz cuando obtuvo su cita allí. Coco / R se distribuye

bajo los términos de un poco relajado Licencia Pública General de GNU. (Terry, 2005)

6
CONSTRUCCIÓN DE ANALIZADOR LÉXICO

Referencias
EcuRed. (s.f). EcuRed. Obtenido de Herramientas para la construcción de compiladore:
https://www.ecured.cu/Herramientas_para_la_construcci%C3%B3n_de_compil
adores

Terry, P. (2005). Obtenido de Coco / R - Coco/R: https://es.qwe.wiki/wiki/Coco/R

También podría gustarte