Está en la página 1de 15

CUP Constructor of Useful Parsers

Organizacin de Lenguajes y Compiladores 1 USAC

Guatemala, 2013

Historia de CUP
Fue desarrollado en la Universidad Pricenton por Scott Hudson, 1995. de

CUP Constructor of Useful Parsers es un analizador sintctico LARL escrito en java.


Basa su diseo en el analizador YACC, creado en lenguaje C, pero esta completamente implementado en java.

Funcionamiento de CUP
Esquema de funcionamiento Cup:
El analizador sintctico arranca. Solicita un token.

El scanner lo devuelve de acuerdo a la codificacin Sym.


Componente lxico Programa fuente

Anlisis Lxico
Obtiene siguiente componente lxico

Anlisis Sintctico

rbol de anlisis sintctico

Archivo de entrada de CUP


Definicin de paquete y sentencias import. Seccin de cdigo de usuario. Declaracin de smbolos terminales y no terminales. Declaraciones de precedencia.

Definicin del smbolo inicial de la gramtica y las reglas de produccin.

Definicin de paquete y sentencias import


La primera parte del fichero se utiliza para incluir informacin que define cmo se generar el analizador y el cdigo de importacin de la librera CUP.

Seccin de cdigo de usuario


En esta seccin se puede incluir cdigo Java que el usuario desee incluir en el analizador sintctico que se va a obtener con CUP. Existen varias partes del analizador sintctico generado con CUP en donde se puede incluir cdigo de usuario.

Seccin de cdigo de usuario


action code{::} Permite definir variables y metodos de asistencia al parser dentro de una clase de ayuda.

Seccin de cdigo de usuario


parser code{::} Permite definir funciones y variables dentro de la clase Parser para adaptar el comportamiento del analizador sintctico.

Seccin de cdigo de usuario


init with{::} Permite definir parmetros de inicializacin que se llamar antes de comenzar el anlisis.

Seccin de cdigo de usuario


scan with{::} Permite indicar qu sentencia debe utilizarse para solicitar un nuevo token.

Declaracin de smbolos
En esta seccin se declaran los smbolos terminales y no terminales de la gramtica que define el analizador sintctico que deseamos producir. Tanto los smbolos no terminales como los smbolos terminales pueden, opcionalmente, tener asociado un objeto Java de una cierta clase.

Declaraciones de precedencia
En CUP, es posible definir niveles de precedencia y la asociatividad de smbolos terminales. La precedencia de los smbolos terminales viene definida por el orden en que aparecen las construcciones precedence.

Gramtica
La gramtica se define en notacin BNF, siguiendo la siguiente sintaxis.

Para definir el smbolo inicial de la gramtica se utiliza la construccin start with...:

Mtodos de Error
syntax_error Este mtodo es invocado por el analizador al detectar un error sintctico, y previamente al intento de recuperarlo. En la implementacin por defecto proporcionada por CUP nicamente se llama al mtodo report_error .

Mtodos de Error
unrecovered_syntax_error Invocado por el analizador si es imposible recuperarse de un error. En la implementacin por defecto proporcionada por CUP nicamente se llama al mtodo report_fatal_error .

También podría gustarte