kernel modules Wiedervereinigung
[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 IntExp  &e);
62     virtual void visit (const FloatExp  &e);
63     virtual void visit (const DoubleExp  &e);
64     virtual void visit (const BoolExp  &e);
65     virtual void visit (const NilExp &e);
66     /** \} */
67
68     /** \name Visit Variable related nodes.
69     ** \{ */
70     virtual void visit (const SimpleVar &e);
71     virtual void visit (const ColonVar &e);
72     virtual void visit (const DollarVar &e);
73     virtual void visit (const ArrayListVar &e);
74     /** \} */
75
76     /** \name Visit Control Expressions or Instructions nodes.
77     ** \{ */
78     virtual void visit (const FieldExp &e);
79     virtual void visit (const OpExp &e);
80     virtual void visit (const LogicalOpExp &e);
81     virtual void visit (const AssignExp  &e);
82     virtual void visit (const CellCallExp &e);
83     virtual void visit (const CallExp &e);
84     virtual void visit (const IfExp  &e);
85     virtual void visit (const TryCatchExp  &e);
86     virtual void visit (const WhileExp  &e);
87     virtual void visit (const ForExp  &e);
88     virtual void visit (const BreakExp &e);
89     virtual void visit (const ContinueExp &e);
90     virtual void visit (const ReturnExp &e);
91     virtual void visit (const SelectExp &e);
92     virtual void visit (const CaseExp &e);
93     virtual void visit (const SeqExp  &e);
94     virtual void visit (const ArrayListExp  &e);
95     virtual void visit (const AssignListExp  &e);
96     /** \} */
97
98     /** \name Visit Single Operation nodes.
99     ** \{ */
100     virtual void visit (const NotExp &e);
101     virtual void visit (const TransposeExp &e);
102     /** \} */
103
104     /** \name Visit Declaration nodes.
105     ** \{ */
106     /** \brief Visit Var declarations. */
107     virtual void visit (const VarDec  &e);
108     virtual void visit (const FunctionDec  &e);
109     /** \} */
110
111     /** \name Visit Type dedicated Expressions related node.
112     ** \{ */
113 public:
114     virtual void visit(const ListExp &e);
115     /** \} */
116
117
118     /*-------------.
119     | Attributes.  |
120     `-------------*/
121 protected:
122     std::wostream   *ostr;
123     int             indent;
124     bool            force_parenthesis;
125     bool            is_last_matrix_line;
126
127     void            apply_indent(void);
128     void            enable_force_parenthesis(void);
129     void            set_force_parenthesis(bool new_state);
130 };
131 }
132 #endif // !AST_PRINTVISITOR_HXX