JavaCC - JJTree: La clase node: Alcance

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.