First macr2tree implementation based on AST.
[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 *  This file must be used under the terms of the CeCILL.
6 *  This source file is licensed as described in the file COPYING, which
7 *  you should have received as part of this distribution.  The terms
8 *  are also available at
9 *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10 *
11 */
12
13 #ifndef __LISTVISITOR_HXX__
14 #define __LISTVISITOR_HXX__
15
16 #include "dummyvisitor.hxx"
17 #include "tlist.hxx"
18
19 //used by macr2tree to generate a tlist from an AST
20
21 namespace ast
22 {
23 class EXTERN_AST TreeVisitor : public DummyVisitor
24 {
25 public:
26     TreeVisitor() : l(nullptr), eol(nullptr) {}
27     ~TreeVisitor() {}
28
29     virtual void visit(const SeqExp  &e);
30     virtual void visit(const CommentExp &e);
31     virtual void visit(const SimpleVar &e);
32     virtual void visit(const DoubleExp &e);
33     virtual void visit(const StringExp &e);
34     virtual void visit(const BoolExp &e);
35     virtual void visit(const DollarVar &e);
36     virtual void visit(const ColonVar &e);
37     virtual void visit(const MatrixExp &e);
38     virtual void visit(const MatrixLineExp &e);
39     virtual void visit(const OpExp &e);
40     virtual void visit(const LogicalOpExp &e);
41     virtual void visit(const IfExp &e);
42     virtual void visit(const ListExp &e);
43     virtual void visit(const AssignExp &e);
44     virtual void visit(const CallExp &e);
45     virtual void visit(const ForExp &e);
46     virtual void visit(const FieldExp &e);
47     virtual void visit(const TryCatchExp  &e);
48     virtual void visit(const WhileExp  &e);
49     virtual void visit(const ContinueExp &/*e*/);
50     virtual void visit(const BreakExp &/*e*/);
51     virtual void visit(const ReturnExp &e);
52     virtual void visit(const SelectExp &e);
53     virtual void visit(const CaseExp &e);
54     virtual void visit(const ArrayListExp &e);
55     virtual void visit(const NotExp &e);
56     virtual void visit(const TransposeExp &e);
57     virtual void visit(const FunctionDec &e);
58
59     inline types::List* getList()
60     {
61         return l;
62     }
63
64     static types::List* createVar(const std::wstring& str);
65     static types::List* createConst(types::InternalType* pIT);
66     static types::List* createOperation();
67     static types::List* createAssign();
68     static types::InternalType* getVerbose(const Exp& e);
69
70     types::InternalType* getEOL();
71 private:
72
73     types::List* l;
74     types::List* eol;
75 };
76 }
77 #endif /* !__LISTVISITOR_HXX__ */