next up previous contents
Next: 8.3 El entorno del Up: 8.2 Los formalismos de Previous: El formalismo SDF

El formalismo PPML

Este formalismo se utiliza para especificar la representación textual de un árbol de sintaxis abstracta. Un programa PPMLgif está constituido por reglas de la forma patrón -> formato, en la que patrón indica los operadores de la sintaxis abstracta que reconoce una regla y formato describe su diposición en el formato de un lenguaje de cajas.

Se pueden escribir múltiples pretty printers para un lenguaje, pero uno de ellos tiene especial relevancia: es el llamado std, que debe respetar y reproducir la sintaxis concreta del lenguaje.

A continuación se muestra una regla del código PPML utilizada en la construcción del pretty printer std para Pascal:

plus(*exp1, *exp2) -> [<hv> if prec(*exp1) = 4 then "(" *exp1 ")"
			    else *exp1
			    end if
			    "+"
			    if prec(*exp2) >= 1 then "(" *exp2 ")"
			    else *exp2
			    end if];

El patrón de la regla indica que cuando en el árbol aparezca el operador plus con dos descendientes, se deberá formatear de acuerdo con lo indicado en la parte derecha de la regla. Las variables *exp1 y *exp2 son instanciadas con el árbol de los descendientes izquierdo y derecho, respectivamente.

En la parte de formato de la regla, <hv> se utiliza para indicar la concatenación horizontal de los elemntos siguientes hasta el final de la línea. las cajas que no quepan en la línea actual serán pasadas a la siguiente línea comenzando en el margen izquierdo marcado por la caja hv actual. Una caja puede contener terminales, variables y otras cajas.

La utilización del if para comparar prioridades permite determinar si la expresión definida por el operador plus deberá ser mostrada rodeada de paréntesis o no.

Los ficheros de recursos

Todos los pretty printers para un lenguaje deben ubicarse bajo el directorio $HOME/centaur/tables/lang/pprinters. En el fichero pascal.rdb debe añadirse la siguiente línea:

Centaur.pascal.ppml.Database.UserDefaults: centaur/tables/pascal/pprinters/pprinters.rdb

En el fichero pprinters.rdb se deberá identificar el fichero de recursos para std:

Centaur.pascal.ppml.std.Datrabase.Userdefaults: centaur/tables/pascal/pprinters/std/std.rdb

El fichero Buildfile

Para poder construir un módulo para std, debe existir un fichero Buildfile en el directorio std. Este fichero, en el caso del lenguaje Pascal, es el siguiente:

LANGUAGE=pascal
LANGDIR=./
ROOTDIR=../../../../../.CENTAUR_SRC/
USERDIR=../../../../../
MODNAME=cenatur/tables/pascal/pprinters/std
PPRINTER=std
ATFILE=
PPMLOPTIONS='module
#include ../../../../../.CENTAUR_SRC/centaur/tables/ppml/BuoldppmlLM
donde: Todos los directorios son relativos al directorio en el que está almacenado el fichero Buildfile. La ejecución del comando ctmake provocará la compilación del pretty printer.


next up previous contents
Next: 8.3 El entorno del Up: 8.2 Los formalismos de Previous: El formalismo SDF

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997