d506be4671667d6964836449335202d2c1e654d2
[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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  * === LICENSE_END ===
14  *
15  */
16
17 #ifndef __PARSER_HXX__
18 #define  __PARSER_HXX__
19
20 #include <cstdio>
21 #include <iostream>
22 #include <string>
23 #include <stdlib.h>
24 #include "parse.hxx"
25
26 extern "C"
27 {
28 #include "charEncoding.h"
29 #include "sci_malloc.h"
30 #include "dynlib_ast.h"
31 }
32
33 class EXTERN_AST Parser
34 {
35 public:
36     Parser() :
37         _stop_on_first_error(false),
38         _strict_mode(false),
39         _parse_trace(false),
40         _exit_status(Succeded),
41         _control_status(AllControlClosed),
42         _the_program(NULL)
43     {
44     }
45
46     ~Parser()
47     {
48         // Do not delete Tree here.
49     }
50
51 public:
52     enum ParserStatus
53     {
54         Succeded ,
55         Failed
56     };
57
58 public:
59     enum ControlStatus
60     {
61         AllControlClosed,
62         WithinFor,
63         WithinWhile,
64         WithinIf,
65         WithinElse,
66         WithinElseIf,
67         WithinTry,
68         WithinCatch,
69         WithinFunction,
70         WithinSelect,
71         WithinSwitch,
72         WithinCase,
73         WithinOtherwise,
74         WithinMatrix,
75         WithinCell,
76         WithinBlockComment,
77         WithinDots
78     };
79
80 public:
81     /** \brief cleanup parser internal buffers */
82     static void cleanup();
83
84     /** \brief parse the given file name */
85     void parseFile(const std::wstring& name, const std::wstring& progName);
86
87     /** \brief parse the given file command */
88     void parse(const char *command);
89     void parse(const wchar_t *command);
90
91     /** \brief enable Bison trace mode */
92     void setParseTrace(bool parseTrace)
93     {
94         _parse_trace = parseTrace;
95     }
96     bool getParseTrace(void)
97     {
98         return _parse_trace;
99     }
100
101     /** Setters / Getters
102         \{ */
103
104     ast::Exp* getTree(void)
105     {
106         return _the_program;
107     }
108     void setTree(ast::Exp* theProgram)
109     {
110         _the_program = theProgram;
111     }
112
113     ParserStatus getExitStatus(void)
114     {
115         return _exit_status;
116     }
117     void setExitStatus(ParserStatus exit_status)
118     {
119         _exit_status = exit_status;
120     }
121
122     ControlStatus getControlStatus(void)
123     {
124         return _control_status;
125     }
126     void setControlStatus(ControlStatus controlStatus)
127     {
128         _control_status = controlStatus;
129     }
130
131     wchar_t *getErrorMessage(void)
132     {
133         return const_cast<wchar_t *>(_error_message.c_str());
134     }
135     void setErrorMessage(const std::wstring& errorMessage)
136     {
137         _error_message = errorMessage;
138     }
139
140     void enableStrictMode(void)
141     {
142         _strict_mode = true;
143     }
144     void disableStrictMode(void)
145     {
146         _strict_mode = false;
147     }
148
149     bool stopOnFirstError(void)
150     {
151         return _stop_on_first_error;
152     }
153     void enableStopOnFirstError(void)
154     {
155         _stop_on_first_error = true;
156     }
157     void disableStopOnFirstError(void)
158     {
159         _stop_on_first_error = false;
160     }
161
162     void releaseTmpFile();
163     /** \} */
164
165
166 private :
167     const std::wstring _file_name;
168     const std::wstring _prog_name;
169     std::wstring _error_message;
170     bool _stop_on_first_error;
171     bool _strict_mode;
172     bool _parse_trace;
173     ParserStatus _exit_status;
174     ControlStatus _control_status;
175     ast::Exp* _the_program;
176 };
177
178 #endif /* !__PARSER_HXX__ */
179