fix warning in ast module.
[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
78     /** \brief parse the given file name */
79     void parseFile(const std::wstring& name, const std::wstring& progName);
80
81     /** \brief parse the given file command */
82     void parse(wchar_t *command);
83
84     /** \brief enable Bison trace mode */
85     void setParseTrace(bool parseTrace)
86     {
87         _parse_trace = parseTrace;
88     }
89     bool getParseTrace(void)
90     {
91         return _parse_trace;
92     }
93
94     /** Setters / Getters
95         \{ */
96
97     ast::Exp* getTree(void)
98     {
99         return _the_program;
100     }
101     void setTree(ast::Exp* theProgram)
102     {
103         _the_program = theProgram;
104     }
105
106     ParserStatus getExitStatus(void)
107     {
108         return _exit_status;
109     }
110     void setExitStatus(ParserStatus exit_status)
111     {
112         _exit_status = exit_status;
113     }
114
115     ControlStatus getControlStatus(void)
116     {
117         return _control_status;
118     }
119     void setControlStatus(ControlStatus controlStatus)
120     {
121         _control_status = controlStatus;
122     }
123
124     wchar_t *getErrorMessage(void)
125     {
126         return const_cast<wchar_t *>(_error_message.c_str());
127     }
128     void setErrorMessage(std::wstring& errorMessage)
129     {
130         _error_message = errorMessage;
131     }
132
133     void enableStrictMode(void)
134     {
135         _strict_mode = true;
136     }
137     void disableStrictMode(void)
138     {
139         _strict_mode = false;
140     }
141
142     bool stopOnFirstError(void)
143     {
144         return _stop_on_first_error;
145     }
146     void enableStopOnFirstError(void)
147     {
148         _stop_on_first_error = true;
149     }
150     void disableStopOnFirstError(void)
151     {
152         _stop_on_first_error = false;
153     }
154     /** \} */
155
156 private :
157     const std::wstring _file_name;
158     const std::wstring _prog_name;
159     std::wstring _error_message;
160     bool _stop_on_first_error;
161     bool _strict_mode;
162     bool _parse_trace;
163     ParserStatus _exit_status;
164     ControlStatus _control_status;
165     ast::Exp* _the_program;
166 };
167
168 #endif /* !__PARSER_HXX__ */
169