Nodo ejecutable. Más...

#include <runTree.h>

Diagrama de herencias de runNode
breakNode caseNode classNode continueNode datInfoNode dowhileNode exitNode foreachNode forNode getNode_endValue globalNode gotoNode ifNode iloopNode incloopNode includeNode labelNode listNode mapNode noNode printableNode printNode privateNode refparamNode returnNode sleepNode staticNode stmtNode switchNode throwNode tryNode typeofNode whileNode withNode

Métodos públicos

 runNode (string str)
 
 runNode ()
 
virtual void run ()=0
 
virtual void addRef ()
 
virtual void rmRef ()
 
virtual bool is_print () const
 
virtual bool is_runlist () const
 
virtual bool is_string () const
 
string getPtrString ()
 

Métodos públicos estáticos

static bool compare (runNode *node1, runNode *node2, int op=0)
 

Descripción detallada

Nodo ejecutable.

Un nodo de ejecución representa la unidad funcional básica de un programa OMI. Un programa estará formado por una serie de nodos relacionados entre si, donde cada nodo produce un resultado semántico al ejecutarse. Un árbol de ejecución consiste en una referencia al nodo que hace de raíz.

Se definen una gran variedad de tipos de nodos ejecutables. Así existirá un nodo de ejecución por cada tipo de dato, sentencia, operador... Cada uno de estos tipos realizará una función diferente sobre los datos y elementos que los forma, que igualmente serán nodos de ejecución.

Por ejemplo una sentencia "if" se corresponderá con un nodo de ejecución que a su vez enlaza a 3 nodos. El primero de los cuales representa una expresión booleana que será evaluada al ejecutarse el nodo "if". Si la expresión booleana resulta verdadera se ejecutará uno de los otros nodos, el cual representará el bloque de sentencias "then". Por el contrario si la expresión resulta falsa se ejecutará el otro que representa el bloque de sentencias "else".

Existen diferentes niveles de abstracción en la definición de los nodos ejecutables.

Los nodos genéricos definen clases de nodos con atributos y métodos afines. Por ejemplo los nodos lógicos tendrán un valor booleano asociado, los nodos imprimibles podrán ser procesados para conformar una salida, etc. Estos nodos son tipos de datos incompletos o interfaces.

Los nodos específicos suelen derivar de los anteriores, es decir, son especializaciones de los nodos genéricos. Algunos de estos nodos pueden ser el operador "or", la sentencia "if", el dato cadena ....

Los nodos pueden ser referenciados desde otros nodos. Las tablas de símbolos son estructuras que guardan nodos que sirven de referencia a otros nodos. Durante la ejecución del árbol pueden crearse nuevos nodos y ser referenciados desde estas estructuras. De esta forma se pueden dar mecanismos como las variables, funciones o clases.

Todo nodo presenta un valor numérico que indica el número de referencias que tiene. Cuando este número es disminuido a cero el nodo es destruido y liberado de memoria. Los nodos creados en el análisis sintáctico no serán liberados hasta que finalice la ejecución.

Documentación del constructor y destructor

runNode::runNode ( string  str)

Constructor de la clase.

runNode::runNode ( )

Constructor de la clase.

Documentación de las funciones miembro

void runNode::addRef ( )
virtual

Aumenta en uno el número de referencias del nodo.

bool runNode::compare ( runNode *  node1,
runNode *  node2,
int  op = 0 
)
static

Compara dos runNode.

Parámetros
node1,node2Nodos a comparar.
opOperador a aplicar case 0: == case 1: != case 2: > case 3: < case 4: >= case 5: <= case 6: ===
string runNode::getPtrString ( )

Obtiene una cadena de caracteres correspondiente a la posición de memoria en la que se encuentra el nodo.

Devuelve
Cadena que representa la posición de memoria.
bool runNode::is_print ( ) const
virtual

Método que indica si el nodo es imprimible y puede ser escrito en la salida estándar.

Devuelve
Booleano que indica si es imprimible.

Reimplementado en fexpNode.

bool runNode::is_runlist ( ) const
virtual

Método que indica si el nodo debe ser ejecutado cuando se procesa una lista de nodos.

Devuelve
Booleano que indica si es imprimible.

Reimplementado en fexpNode, listNode y asigNode.

bool runNode::is_string ( ) const
virtual

Método que indica si el nodo puede ser representado mediante una cadena de caracteres.

Devuelve
Booleano que indica si puede ser representado mediante una cadena.

Reimplementado en strNode.

void runNode::rmRef ( )
virtual

Disminuye en uno el número de referencias del nodo. Si queda reducido a 0 el nodo es destruido y liberado de memoria.

Reimplementado en regexpConstNode, arrayConstNode, fexpNode, refNode, strConstNode, numConstNode y boolConstNode.

virtual void runNode::run ( )
pure virtual

Método virtual de ejecución. Este método debe ser implementado por todas las clases específicas de nodos ejecutables.

La implementación de este método definirá la función que se llevará a cabo al ejecutarse el nodo. Encierra el significado semántico del nodo.

En esencia los distintos nodos se diferencia entre si por la forma en que implementan esta función.

Implementado en regexpNode, emptyNode, isObjectNode, isArrayNode, arrayConstNode, isNumNode, isStringNode, tryNode, isBoolNode, throwNode, isNullNode, sizeNode, forNode, nidenNode, datInfoNode, asigdecNode, arrayNode, sizeOfNode, neqNode, decasigNode, partialFunctionNode, continueNode, arraypopNode, lowerNode, withNode, globalNode, idenNode, getclassNode, asigincNode, contextFunction, mapNode, incloopNode, namespaceNode, arrayshiftNode, upperNode, getEnvNode, gotoNode, refparamNode, incasigNode, eqNode, privateNode, arraypushNode, getiNode, subreplaceNode, getNode_strInterface, returnNode, refNode, staticNode, modNode, listNode, fcloseNode, labelNode, signalhandlerNode, geqNode, replaceNode, idgetNode, ftellNode, arraydeleteNode, signalNode, exitNode, sqrtNode, getNode_endValue, nullNode, iloopNode, functiongetNode, gthNode, fseekNode, breakNode, thisNode, exitProcessNode, arrayinsertNode, findNode, powNode, functioncallNode, newNode, fappendNode, leqNode, processNode, strNode, getNode, arrayfirstNode, foreachGeneratorNode, fwriteNode, getppidNode, divNode, sprintfNode, strconvNode, lthNode, typeofNode, getRefNode, getpidNode, arraylastNode, freadNode, searchNode, sleepNode, includeNode, prodNode, switchNode, waitNode, floatconvNode, asigrefNode, numNode, fgetNode, notNode, implodeNode, foreachNode, timeNode, loadNode, forkNode, explodeNode, fputNode, caseNode, inputNode, stmtNode, subNode, intconvNode, newregexpNode, classNode, andNode, arrayChunkNode, notnullNode, dowhileNode, functionNode, evalNode, dateNode, boolNode, asigNode, catNode, idNode, noNode, fileNode, matchNode, printNode, addNode, ternNode, boolconvNode, orNode, ifNode, whileNode, reduceNode y execNode.


La documentación para esta clase fue generada a partir de los siguientes ficheros:
  • trunk/src/run/tree/runTree.h
  • trunk/src/run/tree/runTree.cpp