Enunciado Examen Diciembre 2015

Anuncio
PROCESADORES DEL LENGUAJES
Diciembre 2015
NOMBRE: _____________________________________________________________ GRUPO: _______
EL LENGUAJE LP
LP es un lenguaje de programación. El programa LP consta de declaraciones de variables e instrucciones. Las variables pueden
ser de tipo entero o de tipo pila de enteros. La declaración de una variable de tipo entero inicializa su valor a 0 y la declaración de
una pila inicializa su valor a pila vacía. El tipo pila tiene las siguientes operaciones: apilar un entero, desapilar la cima y consultar
la cima. Las instrucciones en LP pueden ser de dos tipos: (a) asignación y (b) apilar un entero. La asignación vincula una
expresión entera a una variable de tipo entero. Las expresiones enteras se construyen desde números naturales, variables
enteras, expresiones desapilar y cima de una pila y sumas, restas y multiplicaciones de expresiones enteras.
A continuación se muestra un programa LP de ejemplo.
PROGRAMA
DECLARACIONES
Pila p,q; // p y q son pilas de enteros
Entero x,y,z; // x,y,z son variables enteras
INSTRUCCIONES
p.apilar(3);
p.apilar(y+2-p.cima());
x = p.desapilar()+5;
y = p.desapilar()*x;
q.apilar(2);
z = q.cima();
SE PIDE:
(1) Análisis Sintáctico. Parser ANTLR para reconocer la sintaxis de cualquier programa LP (2.5 puntos).
(2) Análisis Léxico. Lexer ANTLR para reconocer los lexemas de cualquier programa LP (1.5 puntos).
PROCESADORES DEL LENGUAJES
Diciembre 2015
NOMBRE: _____________________________________________________________ GRUPO: _______
EL LENGUAJE LP
LP es un lenguaje de programación. El programa LP consta de declaraciones de variables e instrucciones. Las variables pueden
ser de tipo entero o de tipo pila de enteros. La declaración de una variable de tipo entero inicializa su valor a 0 y la declaración de
una pila inicializa su valor a pila vacía. El tipo pila tiene las siguientes operaciones: apilar un entero, desapilar la cima y consultar
la cima. Las instrucciones en LP pueden ser de dos tipos: (a) asignación y (b) apilar un entero. La asignación vincula una
expresión entera a una variable de tipo entero. Las expresiones enteras se construyen desde números naturales, variables
enteras, expresiones desapilar y cima de una pila y sumas, restas y multiplicaciones de expresiones enteras.
A continuación se muestra un programa LP de ejemplo.
PROGRAMA
DECLARACIONES
Pila p,q; // p y q son pilas de enteros
Entero x,y,z; // x,y,z son variables enteras
INSTRUCCIONES
p.apilar(3);
p.apilar(y+2-p.cima());
x = p.desapilar()+5;
y = p.desapilar()*x-p.desapilar();
z = q.cima();
q.apilar(2);
z = q.cima();
y = p.cima();
//error
//error
SE PIDE:
Análisis Semántico (4 puntos). Construir un analizador semántico capaz de reconocer errores al operar sobre una pila. Se
consideran dos tipos de errores: desapilar de una pila vacía y consultar una pila vacía. En caso de error, se debe dar un mensaje
por pantalla indicando el número de instrucción, la operación causante del error y la pila que provoca el error. Las instrucciones
con error no condicionarán el análisis del resto de las instrucciones, es decir, si durante el análisis se detecta una instrucción con
error, ésta instrucción es como si no existiera en el programa. El análisis del programa de ejemplo daría los siguientes errores:
Error (instrucción 4): operación desapilar sobre pila vacía p
Error (instrucción 5): operación cima sobre pila vacía q
Implemente la solución atribuyendo la gramática del siguiente Tree-Parser ANTLR:
class Anasint2 extends TreeParser;
options{
importVocab=Anasint;
}
instruccion : asignacion
| apilar
;
asignacion : #(ASIG ID expresion)
programa: #(PROGRAMA declaraciones
instrucciones)
;
declaraciones: #(DECLARACIONES (variables)*)
;
variables: #(PILA vars)
| #(ENTERO vars)
;
vars: (ID)+
;
instrucciones: #(INSTRUCCIONES (instruccion)*)
;
;
apilar :
;
#(APILAR ID expresion)
expresion :
|
|
|
|
|
|
;
#(MAS expresion expresion)
#(MENOS expresion expresion)
#(POR expresion expresion)
#(DESAPILAR ID)
#(CIMA ID)
ID
NUMERO
PROCESADORES DEL LENGUAJES
Diciembre 2015
NOMBRE: _____________________________________________________________ GRUPO: _______
EL LENGUAJE LP
LP es un lenguaje de programación. El programa LP consta de declaraciones de variables e instrucciones. Las variables pueden
ser de tipo entero o de tipo pila de enteros. La declaración de una variable de tipo entero inicializa su valor a 0 y la declaración de
una pila inicializa su valor a pila vacía. El tipo pila tiene las siguientes operaciones: apilar un entero, desapilar la cima y consultar
la cima. Las instrucciones en LP pueden ser de dos tipos: (a) asignación y (b) apilar un entero. La asignación vincula una
expresión entera a una variable de tipo entero. Las expresiones enteras se construyen desde números naturales, variables
enteras, expresiones desapilar y cima de una pila y sumas, restas y multiplicaciones de expresiones enteras.
A continuación se muestra un programa LP de ejemplo.
PROGRAMA
DECLARACIONES
Pila p,q; // p y q son pilas de enteros
Entero x,y,z; // x,y,z son variables enteras
INSTRUCCIONES
p.apilar(3);
p.apilar(y+2-p.cima());
x = p.desapilar()+5;
y = p.desapilar()*x;
q.apilar(2);
z = q.cima();
SE PIDE:
Intérprete (2 puntos). Construir un intérprete de programas LP sin errores. Implemente la solución atribuyendo la gramática del
siguiente Tree-Parser ANTLR:
class Anasint2 extends TreeParser;
options{
importVocab=Anasint;
}
instruccion : asignacion
| apilar
;
asignacion : #(ASIG ID expresion)
programa: #(PROGRAMA declaraciones
instrucciones)
;
declaraciones: #(DECLARACIONES (variables)*)
;
variables: #(PILA vars)
| #(ENTERO vars)
;
vars: (ID)+
;
;
apilar :
;
#(APILAR ID expresion)
expresion :
|
|
|
|
|
|
;
#(MAS expresion expresion)
#(MENOS expresion expresion)
#(POR expresion expresion)
#(DESAPILAR ID)
#(CIMA ID)
ID
NUMERO
instrucciones: #(INSTRUCCIONES (instruccion)*)
;
Interpretar un programa LP significa interpretar sus declaraciones de variables y después interpretar sus instrucciones
secuencialmente. Interpretar declaraciones de variables en LP significa crear una memoria para éstas. Interpretar una asignación
en LP significa reducir a constante la expresión de la asignación y actualizar la memoria para la variable asignada. Interpretar una
instrucción de tipo apilar significa reducir a constante la expresión a apilar y actualizar la memoria de variables para dicha pila.
Descargar