Fix memory leak at startup / exit
[scilab.git] / scilab / modules / ast / includes / parse / parser.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - INRIA - 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 __PARSER_HXX__
14 #define  __PARSER_HXX__
15
16 #include <cstdio>
17 #include <iostream>
18 #include <string>
19 #include <stdlib.h>
20 #include "parse.hxx"
21
22 extern "C"
23 {
24 #include "charEncoding.h"
25 #include "sci_malloc.h"
26 #include "dynlib_ast.h"
27 }
28
29 class EXTERN_AST Parser
30 {
31 public:
32     Parser() :
33         _stop_on_first_error(false),
34         _strict_mode(false),
35         _parse_trace(false),
36         _exit_status(Succeded),
37         _control_status(AllControlClosed),
38         _the_program(NULL)
39     {
40     }
41
42     ~Parser()
43     {
44         // Do not delete Tree here.
45     }
46
47 public:
48     enum ParserStatus
49     {
50         Succeded ,
51         Failed
52     };
53
54 public:
55     enum ControlStatus
56     {
57         AllControlClosed,
58         WithinFor,
59         WithinWhile,
60         WithinIf,
61         WithinElse,
62         WithinElseIf,
63         WithinTry,
64         WithinCatch,
65         WithinFunction,
66         WithinSelect,
67         WithinSwitch,
68         WithinCase,
69         WithinOtherwise,
70         WithinMatrix,
71         WithinCell,
72         WithinBlockComment,
73         WithinDots
74     };
75
76 public:
77     /** \brief cleanup parser internal buffers */
78     static void cleanup();
79
80     /** \brief parse the given file name */
81     void parseFile(const std::wstring& name, const std::wstring& progName);
82
83     /** \brief parse the given file command */
84     void parse(wchar_t *command);
85
86     /** \brief enable Bison trace mode */
87     void setParseTrace(bool parseTrace)
88     {
89         _parse_trace = parseTrace;
90     }
91     bool getParseTrace(void)
92     {
93         return _parse_trace;
94     }
95
96     /** Setters / Getters
97         \{ */
98
99     ast::Exp* getTree(void)
100     {
101         return _the_program;
102     }
103     void setTree(ast::Exp* theProgram)
104     {
105         _the_program = theProgram;
106     }
107
108     ParserStatus getExitStatus(void)
109     {
110         return _exit_status;
111     }
112     void setExitStatus(ParserStatus exit_status)
113     {
114         _exit_status = exit_status;
115     }
116
117     ControlStatus getControlStatus(void)
118     {
119         return _control_status;
120     }
121     void setControlStatus(ControlStatus controlStatus)
122     {
123         _control_status = controlStatus;
124     }
125
126     wchar_t *getErrorMessage(void)
127     {
128         return const_cast<wchar_t *>(_error_message.c_str());
129     }
130     void setErrorMessage(std::wstring& errorMessage)
131     {
132         _error_message = errorMessage;
133     }
134
135     void enableStrictMode(void)
136     {
137         _strict_mode = true;
138     }
139     void disableStrictMode(void)
140     {
141         _strict_mode = false;
142     }
143
144     bool stopOnFirstError(void)
145     {
146         return _stop_on_first_error;
147     }
148     void enableStopOnFirstError(void)
149     {
150         _stop_on_first_error = true;
151     }
152     void disableStopOnFirstError(void)
153     {
154         _stop_on_first_error = false;
155     }
156     /** \} */
157
158 private :
159     const std::wstring _file_name;
160     const std::wstring _prog_name;
161     std::wstring _error_message;
162     bool _stop_on_first_error;
163     bool _strict_mode;
164     bool _parse_trace;
165     ParserStatus _exit_status;
166     ControlStatus _control_status;
167     ast::Exp* _the_program;
168 };
169
170 #endif /* !__PARSER_HXX__ */
171