next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Usando la directiva autotree Sup: RecDescent Ant: Usando autoscore Err: Si hallas una errata ...

El Hash %item

En el contexto de una regla de producción, el hash %item proporciona un acceso indexado en los símbolos a los correspondientes atributos. Así, si tenemos la regla A : B C D, el elemento $item{B} hace alusión al atributo de B e $item{C} hace alusión al atributo de C. Los símbolos correspondientes a cadenas, expresiones regulares, directivas y acciones se guardan respectivamente bajo una clave de la forma __STRINGn__, __PATTERNn__, __DIRECTIVEn__, __ACTIONn__, donde n indica la posición ordinal del elemento dentro de los de su tipo en la regla. Así, __PATTERN2__ hace alusión a la segunda expresión regular en la parte derecha de la regla.

El elemento especial $item{__RULE__} contiene el nombre de la regla actual.

La ventaja de usar %item en vez de @items es que evita los errores cometidos al introducir o eliminar elementos en la parte derecha de una producción. Cuando esto ocurre, el programador debe cambiar los números de los índices en la acción.

Una limitación del hash %item es que, cuando hay varias apariciones de una variable sintáctica sólo guarda el valor de la última aparición. Por ejemplo:

   range: '(' number '..' number )' { $return = $item{number} }

retorna en $item{number} el valor correspondiente a la segunda aparición de la variable sintáctica number.


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Usando la directiva autotree Sup: RecDescent Ant: Usando autoscore Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22