59fabe0afb74e780d15c60b6e54b0f9fcbdf42bf
[scilab.git] / scilab / modules / ast / includes / ast / treevisitor.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #ifndef __LISTVISITOR_HXX__
17 #define __LISTVISITOR_HXX__
18
19 #include "dummyvisitor.hxx"
20 #include "tlist.hxx"
21
22 //used by macr2tree to generate a tlist from an AST
23
24 namespace ast
25 {
26 class EXTERN_AST TreeVisitor : public DummyVisitor
27 {
28 public:
29     TreeVisitor() : l(nullptr), eol(nullptr) {}
30     ~TreeVisitor()
31     {
32         eol->killMe();
33         l->killMe();
34     }
35
36     virtual void visit(const SeqExp  &e);
37     virtual void visit(const CommentExp &e);
38     virtual void visit(const SimpleVar &e);
39     virtual void visit(const DoubleExp &e);
40     virtual void visit(const StringExp &e);
41     virtual void visit(const BoolExp &e);
42     virtual void visit(const DollarVar &e);
43     virtual void visit(const ColonVar &e);
44     virtual void visit(const MatrixExp &e);
45     virtual void visit(const MatrixLineExp &e);
46     virtual void visit(const OpExp &e);
47     virtual void visit(const LogicalOpExp &e);
48     virtual void visit(const IfExp &e);
49     virtual void visit(const ListExp &e);
50     virtual void visit(const AssignExp &e);
51     virtual void visit(const CallExp &e);
52     virtual void visit(const ForExp &e);
53     virtual void visit(const FieldExp &e);
54     virtual void visit(const TryCatchExp  &e);
55     virtual void visit(const WhileExp  &e);
56     virtual void visit(const ContinueExp &/*e*/);
57     virtual void visit(const BreakExp &/*e*/);
58     virtual void visit(const ReturnExp &e);
59     virtual void visit(const SelectExp &e);
60     virtual void visit(const CaseExp &e);
61     virtual void visit(const ArrayListExp &e);
62     virtual void visit(const NotExp &e);
63     virtual void visit(const TransposeExp &e);
64     virtual void visit(const FunctionDec &e);
65
66     inline types::List* getList()
67     {
68         return l;
69     }
70
71     static types::List* createVar(const std::wstring& str);
72     static types::List* createConst(types::InternalType* pIT);
73     static types::List* createOperation();
74     static types::List* createAssign();
75     static types::InternalType* getVerbose(const Exp& e);
76
77     types::InternalType* getEOL();
78 private:
79
80     types::List* l;
81     types::List* eol;
82 };
83 }
84 #endif /* !__LISTVISITOR_HXX__ */