%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
.