AST : uniformize accessors name to setXXX and getXXX, add getAs<T> in ast::exp and...
[scilab.git] / scilab / modules / ast / includes / ast / printvisitor.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2007-2008 - DIGITEO - Bruno JOFRET
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-en.txt
10  *
11  */
12
13 #ifndef AST_PRINTVISITOR_HXX
14 #define AST_PRINTVISITOR_HXX
15
16 #include <string.h>
17
18 #include "visitor.hxx"
19 #include "allexp.hxx"
20 #include "allvar.hxx"
21 #include "alldec.hxx"
22 #include "token.hxx"
23
24 namespace ast
25 {
26 class EXTERN_AST PrintVisitor : public GenVisitor<const_kind>
27 {
28 public:
29     PrintVisitor(std::wostream& my_ostr) :
30         ostr (&my_ostr)
31     {
32         indent = 0;
33         force_parenthesis = true;
34     }
35
36     PrintVisitor(std::wostream& my_ostr, bool parenthesis_display) :
37         ostr (&my_ostr),
38         force_parenthesis (parenthesis_display)
39     {
40         indent = 0;
41     }
42
43     /** \name Visit Matrix Expressions nodes.
44     ** \{ */
45 public :
46     virtual void visit (const MatrixExp &e);
47     virtual void visit (const MatrixLineExp &e);
48     /** \} */
49
50     /** \name Visit Cell Expressions nodes.
51     ** \{ */
52 public :
53     virtual void visit (const CellExp &e);
54     /** \} */
55
56     /** \name Visit Constant Expressions nodes.
57     ** \{ */
58 public :
59     virtual void visit (const StringExp &e);
60     virtual void visit (const CommentExp &e);
61     virtual void visit (const DoubleExp  &e);
62     virtual void visit (const BoolExp  &e);
63     virtual void visit (const NilExp &e);
64     /** \} */
65
66     /** \name Visit Variable related nodes.
67     ** \{ */
68     virtual void visit (const SimpleVar &e);
69     virtual void visit (const ColonVar &e);
70     virtual void visit (const DollarVar &e);
71     virtual void visit (const ArrayListVar &e);
72     /** \} */
73
74     /** \name Visit Control Expressions or Instructions nodes.
75     ** \{ */
76     virtual void visit (const FieldExp &e);
77     virtual void visit (const OpExp &e);
78     virtual void visit (const LogicalOpExp &e);
79     virtual void visit (const AssignExp  &e);
80     virtual void visit (const CellCallExp &e);
81     virtual void visit (const CallExp &e);
82     virtual void visit (const IfExp  &e);
83     virtual void visit (const TryCatchExp  &e);
84     virtual void visit (const WhileExp  &e);
85     virtual void visit (const ForExp  &e);
86     virtual void visit (const BreakExp &e);
87     virtual void visit (const ContinueExp &e);
88     virtual void visit (const ReturnExp &e);
89     virtual void visit (const SelectExp &e);
90     virtual void visit (const CaseExp &e);
91     virtual void visit (const SeqExp  &e);
92     virtual void visit (const ArrayListExp  &e);
93     virtual void visit (const AssignListExp  &e);
94     /** \} */
95
96     /** \name Visit Single Operation nodes.
97     ** \{ */
98     virtual void visit (const NotExp &e);
99     virtual void visit (const TransposeExp &e);
100     /** \} */
101
102     /** \name Visit Declaration nodes.
103     ** \{ */
104     /** \brief Visit Var declarations. */
105     virtual void visit (const VarDec  &e);
106     virtual void visit (const FunctionDec  &e);
107     /** \} */
108
109     /** \name Visit Type dedicated Expressions related node.
110     ** \{ */
111 public:
112     virtual void visit(const ListExp &e);
113     /** \} */
114
115
116     /*-------------.
117     | Attributes.  |
118     `-------------*/
119 protected:
120     std::wostream   *ostr;
121     int             indent;
122     bool            force_parenthesis;
123     bool            is_last_matrix_line;
124
125     void            apply_indent(void);
126     void            enable_force_parenthesis(void);
127     void            set_force_parenthesis(bool new_state);
128 };
129 }
130 #endif // !AST_PRINTVISITOR_HXX