Command line debugger first version
[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
30     PrintVisitor(std::wostream& my_ostr, bool parenthesis_display = true, bool _displayOriginal = true, bool _headerOnly = false) :
31         ostr (&my_ostr),
32         force_parenthesis (parenthesis_display),
33         displayOriginal(_displayOriginal),
34         headerOnly(_headerOnly),
35         indent(0) { }
36
37     PrintVisitor* clone()
38     {
39         return new PrintVisitor(*ostr, force_parenthesis, displayOriginal, headerOnly);
40     }
41
42     /** \name Visit Matrix Expressions nodes.
43     ** \{ */
44 public :
45     virtual void visit (const MatrixExp &e);
46     virtual void visit (const MatrixLineExp &e);
47     /** \} */
48
49     /** \name Visit Cell Expressions nodes.
50     ** \{ */
51 public :
52     virtual void visit (const CellExp &e);
53     /** \} */
54
55     /** \name Visit Constant Expressions nodes.
56     ** \{ */
57 public :
58     virtual void visit (const StringExp &e);
59     virtual void visit (const CommentExp &e);
60     virtual void visit (const DoubleExp  &e);
61     virtual void visit (const BoolExp  &e);
62     virtual void visit (const NilExp &e);
63     /** \} */
64
65     /** \name Visit Variable related nodes.
66     ** \{ */
67     virtual void visit (const SimpleVar &e);
68     virtual void visit (const ColonVar &e);
69     virtual void visit (const DollarVar &e);
70     virtual void visit (const ArrayListVar &e);
71     /** \} */
72
73     /** \name Visit Control Expressions or Instructions nodes.
74     ** \{ */
75     virtual void visit (const FieldExp &e);
76     virtual void visit (const OpExp &e);
77     virtual void visit (const LogicalOpExp &e);
78     virtual void visit (const AssignExp  &e);
79     virtual void visit (const CellCallExp &e);
80     virtual void visit (const CallExp &e);
81     virtual void visit (const IfExp  &e);
82     virtual void visit (const TryCatchExp  &e);
83     virtual void visit (const WhileExp  &e);
84     virtual void visit (const ForExp  &e);
85     virtual void visit (const BreakExp &e);
86     virtual void visit (const ContinueExp &e);
87     virtual void visit (const ReturnExp &e);
88     virtual void visit (const SelectExp &e);
89     virtual void visit (const CaseExp &e);
90     virtual void visit (const SeqExp  &e);
91     virtual void visit (const ArrayListExp  &e);
92     virtual void visit (const AssignListExp  &e);
93     /** \} */
94
95     /** \name Visit Single Operation nodes.
96     ** \{ */
97     virtual void visit (const NotExp &e);
98     virtual void visit (const TransposeExp &e);
99     /** \} */
100
101     /** \name Visit Declaration nodes.
102     ** \{ */
103     /** \brief Visit Var declarations. */
104     virtual void visit (const VarDec  &e);
105     virtual void visit (const FunctionDec  &e);
106     /** \} */
107
108     /** \name Visit Type dedicated Expressions related node.
109     ** \{ */
110 public:
111     virtual void visit(const ListExp &e);
112
113     /* optimized */
114     virtual void visit(const OptimizedExp &e);
115     virtual void visit(const MemfillExp &e);
116     virtual void visit(const DAXPYExp &e);
117     virtual void visit(const IntSelectExp &e);
118     virtual void visit(const StringSelectExp &e);
119     /** \} */
120
121
122     /*-------------.
123     | Attributes.  |
124     `-------------*/
125 protected:
126     std::wostream   *ostr;
127     int             indent;
128     bool            force_parenthesis;
129     const bool      displayOriginal;
130     const bool      headerOnly;
131     bool            is_last_matrix_line;
132     bool            is_last_column_comment;
133
134     void            apply_indent(void);
135     void            enable_force_parenthesis(void);
136     void            set_force_parenthesis(bool new_state);
137
138 private:
139
140     void printString(const std::wstring & value)
141     {
142         std::wstring::const_iterator it;
143         *ostr << SCI_OPEN_STRING;
144         for (it = value.begin() ; it != value.end() ; ++it)
145         {
146             if ( *it == '\'' || *it == '"')
147             {
148                 // ' -> '' and " -> "" in scilab strings
149                 *ostr << *it;
150             }
151             *ostr << *it;
152         }
153         *ostr << SCI_CLOSE_STRING;
154     }
155 };
156 }
157 #endif // !AST_PRINTVISITOR_HXX