Nodo ejecutable. Más...
#include <runTree.h>
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) |
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.
| runNode::runNode | ( | string | str | ) |
Constructor de la clase.
| runNode::runNode | ( | ) |
Constructor de la clase.
|
virtual |
Aumenta en uno el número de referencias del nodo.
Compara dos runNode.
| node1,node2 | Nodos a comparar. |
| op | Operador 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.
|
virtual |
Método que indica si el nodo es imprimible y puede ser escrito en la salida estándar.
Reimplementado en fexpNode.
|
virtual |
|
virtual |
Método que indica si el nodo puede ser representado mediante una cadena de caracteres.
Reimplementado en strNode.
|
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.
|
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.