You are on page 1of 4

PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR

FACULTAD DE INGENIERIA
ESCUELA DE SISTEMAS
Nombre: Mariano Navarrete.
Fecha: 12-10-2018
Curso: Quinto Nivel.
COCO/R
RESUMEN:

Es un generador de compilador, que tiene una gramática atribuido de una lengua fuente y
genera un escáner y un analizador sintáctico descendente recursivo para este idioma.
INTRODUCCION:

El perfeccionamiento de los compiladores trae consigo el desarrollo de herramientas para


la realización de los compiladores, estas herramientas se especializan en diferentes partes
del proceso de compilación. Existen algunas herramientas de apoyo, las cuales responden
a los intereses de los múltiples sistemas operativos. Entre las herramientas más utilizadas
están Flex, Yacc, Lex, Bison y en esta consulta se presentara la herramienta COCO/R,
que es una herramienta generador de analizadores léxicos y sintácticos descendentes
recursivos.
OBJETIVOS:
 Descubrir las herramientas de construcción de compiladores.
 Analizar esta herramienta y su funcionamiento.
 Conocer el ambiente en el que puede trabajar la herramienta.

DESARROLLO:
COCO/R

Fue desarrollado originalmente en la Universidad de Linz, y se distribuye bajo los


términos de Licencia Publica General GNU.
El usuario debe suministrar una clase principal que se llama analizador, así como clases
semánticas como: controlador de tabla de símbolos o generador de código, que son
utilizadas para las acciones semánticas del analizador.
Hay versiones de COCO/R para la mayoría de lenguajes: Java, C#, C++, Pascal, Delphi,
VB.NET, Python, Rubi, etc
Muchos proyectos utilizan COCO/R para analizar registros de datos.
Todas las descripciones de sintaxis en COCO/R están escritas en EBNF (Extended
Backus-Naur Form [Wirth77]. Por convención, los identificadores que comienzan con
una letra minúscula denotan símbolos terminales, los identificadores que comienzan con
una letra mayúscula denotan símbolos no terminales. Utiliza los siguientes meta-
carácteres:

Estructura General

Después del nombre de la gramática se puede declarar campos arbitrarios y los métodos
del analizador generado, ejemplo:
int sum;
coid Add(int x){
sum = sum + x;
}
El scanner funciona como un autómata finito determinista
Un escáner tiene que leer el texto fuente, omitir caracteres sin sentido, reconocer tokens
y pasarlos al analizador. Esto se describe en una especificación de escáner, que consta de
5 partes opcionales:
ScannerSpecification =
[“IGNORECASE”]
[“CHARACTERS” {SetDecl}]
[“TOKENS” {TokenDecl}]
[“PRAGMAS” {PragmaDecl}]
{CommentDecl}
{WhiteSpaceDecl}
Conjunto de Caracteres

Esta sección permite al usuario declarar conjuntos de caracteres tales como letras o
números. Sus nombres se pueden utilizar en las otras secciones de especificación del
escáner. COCO/R soporta el juego de caracteres Unicode [UTF – 8 codificado]
Los conjuntos de caracteres se pueden formar a partir de conjuntos básicos con los
operadores
digit = “0123456789”
hexDigit = digit + “ABCDEF”
Tokens

Sección principal de la especificación del escáner, donde los tokens del lenguaje se
declaran.
Se dividen en dos: Literales y Token clases
- Literales: tienen una representación fija en el idioma de origen. En la gramática que se
escriben cadenas {por ejemplo, “while” o “> =”}
- Token Classes: tienen una cierta estructura que debe estar declarado explícitamente por
una expresión regular en EBNF

Espacio en blanco

Caracteres tales como espacio en blanco, tabuladores o símbolos de final de línea son
generalmente considerados como espacio en blanco que debe ser ignorado por el escáner.
Los espacios en blanco son ignorados por defecto.

Scanner
El scanner trabaja como un autómata finito determinístico. Soporta caracteres Unicode
UTF-8.
Reconoce tokens basados en el contexto de la mano derecha. También reconoce pagmas,
que son tokens que no son parte de la sintaxis pero pueden ocurrir en cualquier lugar del
stream del input.

Pragmas

Son tokens que pueden ocurrir en cualquier parte de la corriente de entrada. Sería
demasiado tedioso manejar todas sus posibles incidencias en la gramática. Por lo tanto,
quedan excluidos de la salida de señal que se pasa al analizador. Pragma se declaran como
testigos, pero pueden tener una acción semántica asociada a ellos que ejecuta cada vez
que se reconocen por el escáner.
Parser
Es un lenguaje recursivo descendente, los conflictos de LL pueden ser resuetos por
símbolos múltiples siguientes o por revisiones de semántica. EL manejo de error en el
parses puede ser encendido especificado puntos sincronizados y símbolos débiles en la
gramática.
Importaciones
Frente a la palabra clave COMPILER se pude importar los espacios de nombre en C# o
paquetes en JAVA o incluir archivos de cabecera.
Comentarios

Los comentarios son difíciles de especificar con expresiones regulares; comentarios


anidados son aun imposible especificar de esa manera. Esto hace que sea necesario contar
con una construcción especial para definir su estructura.
Los comentarios son declarados por indicación de su apertura y de cierre de paréntesis.
La palabra clave NESTED denota que se puede anidar.

CONCLUSIONES:

 Coco/R es una herramienta que genera analizadores léxicos y sintácticos,


además también crea un escáner.
 Coco/R soporta el juego de caracteres Unicode.
 Coco/R soporta varios lenguajes de programación.
 Coco/R utiliza recursividad descendente.

RECOMENDACIONES:

 Analizar otra herramienta que realice la misma función a la escogida.


 Comparar la herramienta escogida con otras para reconocer sus diferencias.
 Se debe verificar cómo funciona la herramienta antes de ponerla en uso.
 Tener en claro la funcionalidad y las características que esta herramienta se
vuelve mejor para el uso determinado.

BIBLIOGRAFÍA:
 Diaz, Emiliano Llano. Análisis y Diseño de Compiladores. Mexico : Exa
ingeniería SA, 2002.
 Ullman, Alfred V. Aho y Jeffrey D. Compiladores Principios,Técnicas y
Herramientas. Estados Unidos : s.n., 2005.
 www.ssw.uni-linz.ac.at/Coco/Doc/UserManual.pdf

You might also like