Alcance del Nodo y Acciones de Usuario
Cada nodo tiene asociado un alcance de nodo. El alcance es la unidad de
expansión que precede inmeditamente a la decoración del nodo. Puede ser
una expresión encerrada entre paréntesis. Cuando la signatura de la producción
se decora (quizá implícitamente con el nodo por defecto), el alcance es
el lado derecho entero de la producción incluyendo su bloque de declaraciones.
Las acciones de usuario en este alcance, pueden acceder al nodo bajo construcción
usando el identificador especial jjtThis para referirse al nodo. Este identificador
está declarado implícitamente para ser del tipo correcto del nodo, de tal
forma que todos los campos y métodos del nodo pueden ser accedidos fácilmente.
También pueden utilizarse expresiones que involucren jjtThis en el lado
izquierdo de una referencia de expansión. Por ejemplo:
... ( jjtThis.my_foo = foo() ) #Baz ...
Aquí jjtThis se refiere a un nodo Baz, que tiene un campo llamado my_foo.
El resultado de parsear la producción foo() es asignada a my_foo.
La acción final de usuario en el alcance de un nodo, es diferente de todas
las otras. Cuando el código se ejecuta, los hijos del nodo han sido desapilados
y asociados al nodo, el cual ha sido apilado. Los hijos, ahora pueden ser
accedidos por medio de los métodos del nodo padre, tales como jjtGetChild().
Las otras acciones de usuario sólo pueden acceder los hijos en la pila.
No fueron asociadas a los nodos y por eso no están disponibles por medio
de métodos de los nodos.
Un nodo condicional que tiene una expresión descriptora de nodo que evalúa
falso, no se agrega a la pila, ni tiene hijos asociados a él. La acción
de usuario final con un alcance de nodo condicional puede determinar, por
medio de la invocación del método nodeCreated(), si el nodo fue creado
o no . Esto retorna verdadero si la condición del nodo fue satisfecha y
el nodo fue creado y apilado en la pila, y falso en otro caso.