El Ciclo de Vida de un Nodo
Cuando un nodo es creado atraviesa una serie de pasos. Esta es la secuencia
vista desde la perspectiva del propio nodo:
1. El constructor del nodo es invocado con un parámetro entero único. Este parámetro identifica la clase de nodo y es muy usado especialmente el modo simple. JJTree genera automáticamente un archivo llamado parserTreeConstants.java y declara constantes Java para los identificadores del nodo. También declara un arreglo de String denominado jjtNodeName[] que asocia el identificador entero al nombre de los nodos.
2. Se llama el método jjtOpen().
3. Si la opción NODE_SCOPE_HOOK está seteada, es llamado el método de parser openNodeScope() definido por el usuario pasando el nodo como parámetro. Este método puede inicializar campos en el nodo o llamar a sus propios métodos. Por ejemplo, podría almacenar en el nodo, su primer token.
4. Si una excepción no manejada es lanzada mientras el nodo está siendo parseado entonces el nodo se abandona. JJTree nunca se referirá a él nuevamente
5. En otro caso, si el nodo es condicional y el resultado de la evaluación de su expresión condicional es falso entonces el nodo se abandona. El nodo no será cerrado, aunque el método closeNodeHook() podría ser llamado con el nodo como parámetro.
6. En otro caso, todos los hijos del nodo especificados por la expresión entera del nodo definido, o todos los nodos que fueron apilados en la pila en el alcance de un nodo condicional, son agregados o asociados al nodo. El orden en que son asociados no está especificado.
7. Se invoca el método jjtClose() del nodo.
8. Se apila el nodo.
9. Si la opción NODE_SCOPE_HOOK está seteada, el método de parser definido por el usuario CloseNodeScope() es invocado con el nodo pasado como parámetro.
10. Si el nodo no es el nodo raiz, es asociado como un hijo a otro nodo y se invoca su método jjSetParent().