kernel modules Wiedervereinigung
[scilab.git] / scilab / modules / ast / includes / parse / parser_private.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - 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_PRIVATE_HXX__
14 #define __PARSER_PRIVATE_HXX__
15
16 #include "parser.hxx"
17
18 class ParserSingleInstance
19 {
20 public :
21     static Parser::ControlStatus getControlStatus(void)
22     {
23         if (!_control_status.empty())
24         {
25             return _control_status.front();
26         }
27         return Parser::AllControlClosed;
28     }
29
30     static void pushControlStatus(Parser::ControlStatus control_status)
31     {
32         //std::cout << "Push front : " << control_status << std::endl;
33         _control_status.push_front(control_status);
34     }
35
36     static void popControlStatus(void)
37     {
38         if (!_control_status.empty())
39         {
40             //std::cout << "Pop front" << std::endl;
41             //std::cout << "size = " << _control_status.size() << std::endl;
42             _control_status.pop_front();
43         }
44     }
45
46     static void resetControlStatus(void)
47     {
48         _control_status.clear();
49     }
50
51     static Parser::ParserStatus getExitStatus(void)
52     {
53         return _exit_status;
54     }
55     static void setExitStatus(Parser::ParserStatus exit_status)
56     {
57         _exit_status = exit_status;
58     }
59
60     static ast::Exp* getTree(void)
61     {
62         return _the_program;
63     }
64     static void setTree(ast::Exp* theProgram)
65     {
66         _the_program = theProgram;
67     }
68
69     /*
70     ** Parsing functions
71     */
72     static void parse(char *command);
73     static void parseFile(const std::wstring& fileName, const std::wstring& progName);
74
75     /*
76     ** Manage strict Mode
77     */
78     static bool isStrictMode(void)
79     {
80         return _strict_mode;
81     }
82     static void enableStrictMode(void)
83     {
84         _strict_mode = true;
85     }
86     static void disableStrictMode(void)
87     {
88         _strict_mode = false;
89     }
90
91     /*
92     ** Manage error recovery mode
93     */
94     static bool stopOnFirstError(void)
95     {
96         return _stop_on_first_error;
97     }
98     static void enableStopOnFirstError(void)
99     {
100         _stop_on_first_error = true;
101     }
102     static void disableStopOnFirstError(void)
103     {
104         _stop_on_first_error = false;
105     }
106
107     /*
108     ** Bison Debug management
109     */
110     static void enableParseTrace(void);
111     static void disableParseTrace(void);
112
113     /*
114     ** File name management
115     */
116     static const std::wstring getFileName(void)
117     {
118         return _file_name;
119     }
120     static void setFileName(const std::wstring& fileName)
121     {
122         _file_name = fileName;
123     }
124
125     /*
126     ** Program Name Management
127     */
128     static const std::wstring getProgName(void)
129     {
130         return L"Scilab6";
131     }
132     static void setProgName(const std::wstring& progName)
133     {
134         _prog_name = progName;
135     }
136
137     /*
138     ** Error Message management
139     */
140     static std::wstring& getErrorMessage(void);
141     static void appendErrorMessage(std::wstring ostr);
142     static void resetErrorMessage(void)
143     {
144         _error_message.clear();
145     }
146
147     /*
148     ** \brief This funnction returns the parsed code written
149     ** at the given line.
150     ** out = getCodeLine(10, codeline)
151     ** When returning, out == *codeLine, _BUT_ out is allocated by a inner
152     ** function and must be manually free.
153     */
154     static char* getCodeLine(int line, char **codeLine);
155
156     static void PrintError(std::wstring msg);
157
158 private :
159     static std::wstring _file_name;
160     static std::wstring _prog_name;
161     static std::wstring _error_message;
162     static bool _strict_mode;
163     static bool _stop_on_first_error;
164     static ast::Exp* _the_program;
165     static Parser::ParserStatus _exit_status;
166     static std::list<Parser::ControlStatus> _control_status;
167     static FILE* fileLocker;
168
169 };
170
171 #endif /* !__PARSER_PRIVATE_HXX__ */
172