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