loopStmtNode.h
Ir a la documentación de este archivo.
1 //loopStmtNode.h
2 //-------------------------------------------------------------------------------------------
3 /*
4  * Fco. Javier Bohórquez Ogalla
5  * 75766599-E
6  * Puerto Real (Cádiz)
7  * powersgame@gmail.com
8  */
9 //-------------------------------------------------------------------------------------------
10 
11 //-------------------------------------------------------------------------------------------
12 /*
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26  * MA 02110-1301, USA.
27  */
28 //-------------------------------------------------------------------------------------------
29 
30 //-------------------------------------------------------------------------------------------
38 //-------------------------------------------------------------------------------------------
39 
40 //-------------------------------------------------------------------------------------------
41 #ifndef _RUN_STMTS_FILEOPNODE_
42 #define _RUN_STMTS_FILEOPNODE_
43 
44 #include "../tree/typeNode.h"
45 #include "../operators/opNode.h"
46 #include "../../error.h"
47 #include "../../interpreter.h"
48 //-------------------------------------------------------------------------------------------
49 
50 //-------------------------------------------------------------------------------------------
59 class whileNode :
60  public runNode {
61  public:
67  whileNode (runNode* exp, runNode* rb);
73  void run ();
74  private:
75  runNode *exp_, *rb_;
76 };
77 //-------------------------------------------------------------------------------------------
78 
79 //-------------------------------------------------------------------------------------------
90 class dowhileNode :
91  public runNode {
92  public:
98  dowhileNode (runNode* exp, runNode* rb);
103  void run ();
104  private:
105  runNode *exp_, *rb_;
106 };
107 //-------------------------------------------------------------------------------------------
108 
109 //-------------------------------------------------------------------------------------------
124 class foreachNode :
125  public runNode {
126  public:
134  foreachNode (runNode* val, runNode* exp, runNode* rb = NULL, runNode* key = NULL);
140  void run ();
141  private:
142  void run_case_num ( numNode * n);
143  void run_case_array ( arrayNode * a);
144  void run_case_bool ( logicNode * l);
145  void run_case_str ( stringNode * s);
146  runNode *exp_, *rb_, *val_, *key_;
147 };
148 //-------------------------------------------------------------------------------------------
149 
150 //-------------------------------------------------------------------------------------------
187  public arrayNode {
188  public:
199  foreachGeneratorNode (runNode *elem, runNode* val, runNode* exp, runNode* rb, runNode* key = NULL, runNode *if_cond = NULL, runNode * elem_key = NULL);
204  void run ();
205  private:
206  void run_case_num ( numNode * n);
207  void run_case_array ( arrayNode * a);
208  void run_case_bool ( logicNode * l);
209  void run_case_str ( stringNode * s);
210  void generator ();
211  runNode *elem_, *exp_, *rb_, *val_, *key_, *if_cond_, *elem_key_;
212 };
213 //-------------------------------------------------------------------------------------------
214 
215 //-------------------------------------------------------------------------------------------
243 class iloopNode :
244  public runNode {
245  public:
255  iloopNode (runNode* iter, runNode* stmt, runNode *id = NULL, runNode *second_id = NULL, runNode *inc = NULL);
261  void run ();
266  static runNode * get_ielement ();
272  static runNode * get_ielement_n (int i);
278  static runNode * set_ielement (runNode* node);
284  static runNode * push_ielement (runNode* node);
289  static runNode * pop_ielement ();
293  static void push_level ();
297  static void pop_level ();
298  void setId (runNode * node, bool second = false);
299  private:
300  void run_case_num ( numNode * n);
301  void run_case_array ( arrayNode * a);
302  void run_case_bool ( logicNode * l);
303  void run_case_str ( stringNode * s);
304  static int icount;
305  static vector<runNode*> ielement;
306  static vector<int> stack_icount;
307  static vector<vector<runNode*> > stack_ielement;
308  runNode *iter_, *stmt_, *id_, *second_id_, *inc_;
309 };
310 //-------------------------------------------------------------------------------------------
311 
312 //-------------------------------------------------------------------------------------------
321 class getiNode : public nexpNode {
322  public:
329  getiNode (runNode *node = NULL);
334  void run ();
335  private:
336  runNode* node_;
337 };
338 //-------------------------------------------------------------------------------------------
339 
340 //-------------------------------------------------------------------------------------------
350 class incloopNode :
351  public runNode {
352  public:
359  incloopNode (runNode* id, runNode* max, runNode* stmt);
365  void run ();
366  private:
367  runNode *id_, *max_, *stmt_;
368 };
369 //-------------------------------------------------------------------------------------------
370 
371 //-------------------------------------------------------------------------------------------
387  public runNode {
388  public:
393  continueNode (int n = 1);
398  void run ();
399  private:
400  int n_;
401 };
402 //-------------------------------------------------------------------------------------------
403 
404 //-------------------------------------------------------------------------------------------
417  public std::exception {
418  public:
423  continueException (int n = 1);
428  const char* what() const throw();
433  void end ();
439  bool islast ();
440  private:
441  int n_;
442 };
443 //-------------------------------------------------------------------------------------------
444 
445 //-------------------------------------------------------------------------------------------
455 class forNode :public runNode {
456  public:
464  forNode (runNode* asig, runNode* exp, runNode* inc, runNode* rb);
473  void run ();
474  private:
475  runNode *exp_, *rb_, *asig_, *inc_;
476 };
477 //-------------------------------------------------------------------------------------------
478 
479 //-------------------------------------------------------------------------------------------
480 #endif
481 //-------------------------------------------------------------------------------------------
482 //Fco. Javier Bohórquez Ogalla
Excepción lanzada cuando se produce una sentencia continue.
Definition: loopStmtNode.h:416
void run()
Definition: loopStmtNode.cpp:645
incloopNode(runNode *id, runNode *max, runNode *stmt)
Definition: loopStmtNode.cpp:667
void run()
Definition: loopStmtNode.cpp:42
continueNode(int n=1)
Definition: loopStmtNode.cpp:717
Nodos lógicos.
Definition: expNode.h:279
void run()
Definition: loopStmtNode.cpp:757
Nodo de sentencia de iteración ágil.
Definition: loopStmtNode.h:243
forNode(runNode *asig, runNode *exp, runNode *inc, runNode *rb)
Definition: loopStmtNode.cpp:746
void run()
Definition: loopStmtNode.cpp:478
whileNode(runNode *exp, runNode *rb)
Definition: loopStmtNode.cpp:39
void run()
Definition: loopStmtNode.cpp:719
void run()
Definition: loopStmtNode.cpp:80
static void push_level()
Definition: loopStmtNode.cpp:464
Nodo numérico.
Definition: typeNode.h:119
void run()
Definition: loopStmtNode.cpp:676
Nodo para la lista por compresión.
Definition: loopStmtNode.h:186
Nodo array.
Definition: typeNode.h:403
Nodo sentencia iterativa for.
Definition: loopStmtNode.h:455
Nodo sentencia iterativa de incremento.
Definition: loopStmtNode.h:350
iloopNode(runNode *iter, runNode *stmt, runNode *id=NULL, runNode *second_id=NULL, runNode *inc=NULL)
Definition: loopStmtNode.cpp:415
Nodo ejecutable.
Definition: runTree.h:123
Nodo sentencia while.
Definition: loopStmtNode.h:59
static runNode * pop_ielement()
Definition: loopStmtNode.cpp:457
const char * what() const
Definition: loopStmtNode.cpp:731
static runNode * push_ielement(runNode *node)
Definition: loopStmtNode.cpp:451
void run()
Definition: loopStmtNode.cpp:126
void end()
Definition: loopStmtNode.cpp:735
bool islast()
Definition: loopStmtNode.cpp:738
static runNode * get_ielement_n(int i)
Definition: loopStmtNode.cpp:436
static runNode * set_ielement(runNode *node)
Definition: loopStmtNode.cpp:445
Nodo sentencia do..while.
Definition: loopStmtNode.h:90
static void pop_level()
Definition: loopStmtNode.cpp:471
continueException(int n=1)
Definition: loopStmtNode.cpp:729
Node operador acceso a iterador.
Definition: loopStmtNode.h:321
foreachGeneratorNode(runNode *elem, runNode *val, runNode *exp, runNode *rb, runNode *key=NULL, runNode *if_cond=NULL, runNode *elem_key=NULL)
Definition: loopStmtNode.cpp:252
Nodos cadenas de texto.
Definition: expNode.h:418
foreachNode(runNode *val, runNode *exp, runNode *rb=NULL, runNode *key=NULL)
Definition: loopStmtNode.cpp:115
dowhileNode(runNode *exp, runNode *rb)
Definition: loopStmtNode.cpp:77
getiNode(runNode *node=NULL)
Definition: loopStmtNode.cpp:643
Nodo sentencia foreach.
Definition: loopStmtNode.h:124
Nodo sentencia continue.
Definition: loopStmtNode.h:386
void run()
Definition: loopStmtNode.cpp:269
Nodo expresión de tipo no definido.
Definition: expNode.h:164
static runNode * get_ielement()
Definition: loopStmtNode.cpp:428