Memoria Pascal

Páginas: 5 (1174 palabras) Publicado: 23 de enero de 2014
PRÁCTICA DE PROCESADORES DE
LENGUAJES
Curso 2008 – 2009
Entrega de Septiembre

GRUPO (A ó B): B

CAMBIOS REALIZADOS
SINTÁCTICO

EN LOS ANALIZADORES

LÉXICO

Y

En el analizador Léxico creo que no he cambiado ninguna cosa, quizá algún
detalle menor. En cuanto al sintáctico, he cambiado algunas reglas, que a
nivel sintáctico eran iguales, pero no me permitían realizar un buenanálisis
semántico. Son un ejemplo de este caso las definiciones de campos de un
registro, ya que a nivel sintáctico son muy parecidas (o iguales) a una
declaración de variables, pero a nivel semántico hay que hacer otras tareas
con los registros que no tienen nada que ver con las tareas que hay que
hacer cuando se trata de variables.

EL

ANALIZADOR

SEMÁNTICO

Aquí comenzó acomplicarse la cosa, y me costó bastante arrancar. Al final
aglutine las clases de los no terminales en las siguientes:


BloqueSentencias (útil para la generación de código intermedio)



DefCamposRegistro (según voy añadiendo campos a un registro,
los voy metiendo en esta clase, y finalmente recorro los campos de
esta clase para crear el Tipo Registro. Al principio esto lo hacía con
unavariable global, pero finalmente me pareció más elegante esta
otra opción).



Expresión (la uso para hacer comprobaciones de tipos)



ListaObjetos (Es como una clase auxiliary que uso para juntar
objetos del mismo tipos y hacerlos subir en el árbol sintáctico)



Par (Parámetros de funciones)



ProgramModule (Facilitada por el equipo docente)



Var (Variables,clase auxiliar donde voy almacenando el tipo,
nombre, linea y columna de la variable que estoy definiendo)

DESCRIPCIÓN

DE LA

TABLA

DE

SÍMBOLOS

Sobre la arquitectura que proporciona el equipo docente, mi tabla de
símbolos contiene un scope (ya que cada uno de ellos tiene su propia tabla
de símbolos) y un HashMap que almacena todos los símbolos para ese
scope. Implementé todaslas funciones que necesitaba en esta clase.
Cabe mencionar que tengo una clase de utilidades, en donde implementé
funciones para devolver una Lista a partir de un HashMap
(getListFromHashMap). Dos funciones para buscar Tipos en toda la pila de
scopes (y no solo en el actual) (containsType y searchType). Así como un
método para calcular el tamaño que ocupa en memoria un tipo de datos
pasadopor parámetro (BuscaTamanyoTipo).

GENERACIÓN

DE

CÓDIGO INTERMEDIO

En esta fase se genera código intermedio, independiente del hardware. El
tipo de código intermedio es el de tres direcciones, formando cuadruplas
con el formato:
OPERACION, RESULTADO, OPERADO1, OPERADOR2
Las palabras clave usadas para las operaciones han sido:
ADD, para las sumas
ASIG, para las asginaciones
BN,salto si negativo
BR, salto incondicional
BZ, salto si es cero
BNZ, salto si no es cero
CMP, comparaciones
DEV, sentencias devuelve
DIV, divisiones
ESCRIBE, muestra por pantalla texto
ESCRIBEENT, muestra por pantalla enteros
ESCRIBESAL, muestra por pantalla saltos de linea
ETIQUETA, etiquetas para los saltos
FIN, fin del programa

FINFUNCION, fin de la declaracion de funcionesFUNCION, comienzo de la declaracion de funciones
INICIO, inicio del programa
LLAMA, llamada a función
NOP, ninguna operación
PAR, parámetro para llamada a funcion
PARAMETROS, comienzo de parámetros para la función
Ejemplo de un programa en ñ:
/*  8.n
// Precedencia de operadores
*/
vacio principal () {
entero a;
entero b;
b = 19;
a = b++;
a= a+1+6/2;
escribe("a(24):");escribeEnt(a);
a = ((3+3)/2);
escribe("asociacion_parentesis(3):");
escribeEnt(a);
devuelve;
}

El mismo programa en código intermedio:
********************************************
**           CODIGO INTERMEDIO            **
********************************************
** Cuadruple ­ [INICIO 0, null, null]
** Cuadruple ­ [FUNCION .Lprincipal0, null, null]
** Cuadruple ­ [ASIG b, 19, null]...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • pascal
  • pascal
  • Pascal
  • pascal
  • Pascal
  • pascal
  • el pascal
  • pascal

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS