El PPP (Perl PreProcessor)

Como dijimos al principio, todos los ficheros de configuraci�n y de distribuci�n de PICA se preprocesan antes de pasar por el analizador sint�ctico. Este componente es uno de los puntos m�s importantes de PICA, porque es el que le da gran parte de su flexibilidad. Es f�cil de usar y entender y da unas posibilidades a la hora de tratar los ficheros a distribuir que, al menos de forma tan sencilla, no hemos encontrado en ninguna otra herramienta.

El preprocesador es una funci�n escrita en Perl que hace las sustituciones necesarias en el fichero, generando uno nuevo ya preprocesado. Es muy parecido al preprocesador de C, pero con algunas diferencias importantes:

La lista completa de opciones que nos da el preprocesador es:

Veamos un ejemplo del preprocesador de PICA en acci�n, con uno de los ficheros de ejemplo que vienen en la distribuci�n oficial:

Ejemplo 11. Ejemplo de fichero de distribuci�n de PICA

Well, this is just a test file to see if it worked...

The value of the (local) variable myvar is '<# $myvar #>'
The value of the (local) variable mythirdvar is '<# $mythirdvar #>'


$myvar is <# ($myvar lt $mythirdvar)?'less':'greater' #> than
$mythirdvar...

The crypt'ed version of $mythirdvar is '<# crypt $mythirdvar,
'aa' #>'.


Now, a little list from 0 to <# $limit #>:
#perl
my @result;
for (my $i = 0; $i < $limit; ++$i) {
        push @result, "$i\n";
}
@result;
#lrep
    

Suponiendo una definici�n como la siguiente:

Ejemplo 12. Ejemplo de definici�n del fichero pica-rules en objects.conf

file pica-rules {
    path = '<#$picaroot#>/rules';	  # Esto tambi�n se
                                          # preprocesar�
    source = 'pica-rules';

    vars {
       myvar         = 'foo';
       limit         = '2';
       mythirdvar    = 'enough';
    }
}
    

el resultado del fichero, ya preprocesado, ser�a:

Ejemplo 13. Fichero preprocesado por PPP

Well, this is just a test file to see if it worked...

The value of the (local) variable myvar is 'foo'
The value of the (local) variable mythirdvar is 'enough'


$myvar is greater than $mythirdvar...

The crypt'ed version of $mythirdvar is 'aaVxUBNI9d3lI'.


Now, a little list from 0 to 2:
0
1
    

Esta versi�n es, naturalmente, la que se instalar�a en las m�quinas. N�tese adem�s que el fichero de configuraci�n de definici�n de objetos (objects.conf) y los ficheros de distribuci�n vuelven a leerse y preprocesarse por cada m�quina, as� que podemos hacer que �stos dependan del objetivo donde se instalar�n (ver ejemplo "Creaci�n de varios ficheros a partir de un solo fuente" en el siguiente apartado).