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