Ikuiuiu

Páginas: 18 (4392 palabras) Publicado: 19 de enero de 2013
Procesadores de Lenguaje
CUP - Constructor of Useful Parsers
Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá

CUP

• CUP (Constructor of Useful Parsers)
– genera analizadores sintácticos LALR. – CUP genera código Java que implementa el analizador sintáctico a partir de un fichero con la especificación sintáctica del lenguaje.Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

CUP – Instalación

http://www.cs.princeton.edu/~appel/modern/java/CUP/

1. Elegir el directorio. Ej.: c:\java 2. Descomprimir java_cup_v10k.zip 3. Añadir a la variable de entorno CLASSPATH.

Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

CUP – Ejecución
1. Para crear el analizador sintáctico, debemosinvocar el intérprete de Java y ejecutar el método java_cup.Main:
java java_cup.Main – Si se omite el nombre del fichero de especificación sintáctica, CUP interpreta que la especificación sintáctica se introducirá por la entrada estándar.

2. Compilar las clases necesarias:
javac parser.java sym.java
Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

CUP - El código generado• CUP genera dos ficheros con los nombres, por defecto:
– sym.java contiene las definiciones de constantes de la clase sym, que asigna un valor entero a cada terminal y, opcionalmente, a cada no terminal – parser.java clase pública del analizador sintáctico.

Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

Ejemplo – CUP sym.java//---------------------------------------------------// The following code was generated by CUP v0.10k // Sun Mar 11 01:33:31 CET 2007 //---------------------------------------------------/** CUP generated class containing symbol constants. */ public class sym { /* terminals */ public static final int RPARENT = 10; public static final int DIGITO = 6; public static final int POTENCIA = 7; public static final int SUMA = 2; public static finalint MULTIPLICACION = 5; public static final int EOF = 0; public static final int SIGNO = 11; public static final int RESULTADO = 8; public static final int error = 1; public static final int DIVISION = 4; public static final int RESTA = 3; public static final int LPARENT = 9; }
Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

Clase analizador sintáctico parser.java•parser.java contiene 2 clases:
– public class parser extends java_cup.runtime.lr_parser{ ...} • Clase pública del analizador: • Subclase de java_cup.runtime.lr_parser que implementa la tabla de acciones de un analizador LALR. – class CUP$parser$actions • Clase no pública incluida en el fichero que encapsula las acciones de usuario contenidas en la gramática. • Contiene el método que selecciona y ejecutalas diferentes acciones definidas en cada regla sintáctica: – public final java_cup.runtime.Symbol CUP$parser$do_action

Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

Tablas de parser.java
protected static final short[][] _production_table
– La tabla de producción contiene el número de símbolo de la izquierda de la producción, para cada producción de la gramática.protected static final short[][] _action_table
– La tabla de acciones,donde se indica qué acción (desplazamiento, reducción o error) debe utilizarse para cada símbolo anticipado (lookahead) en función del estado en que se encuentre el análisis.

protected static final short[][] _reduce_table
– La tabla de saltos a estados indica estado al que debe irse después de una reducción, en función delno-terminal y el estado en que se encuentra el análisis.

Procesadores de lenguaje – CUP Salvador Sánchez, Daniel Rodríguez

Método parse
• El análisis es realizado por el método public Symbol parse() • La invocación del analizador puede realizarse con un código como el siguiente:
/* declara el objeto parser */ parser analizer; ...tratamiento de ficheros y otros... /* Creación */ analizer...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS