forked from kvirund/calculator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
console.h
63 lines (52 loc) · 1.42 KB
/
console.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef __CONSOLE_H__
#define __CONSOLE_H__
#include "parser.h"
#include <string>
namespace grammar
{
struct SState;
namespace console
{
// This functions were generated by lemon
void *ParseAlloc(void *(*mallocProc)(size_t));
void Parse( void *yyp, int yymajor, void* yyminor, SState*);
void ParseFree( void *p, void (*freeProc)(void*));
}
}
class CConsole
{
public:
CConsole(int arc, char** argv);
~CConsole() { delete m_variable; }
int run();
void set_command(const std::string& command) { m_command = command; }
void set_expression(const std::string& expression) { m_expression = expression; }
void set_variable(parser::CObjectTreeNode* var);
private:
enum EMode
{
EM_EXPRESSIONS,
EM_WHERE
};
parser::CParser m_parser;
EMode m_mode;
bool m_interactive;
bool m_do_exit;
std::string m_command;
std::string m_expression;
parser::CObjectTreeNode* m_variable;
void prepare_variables();
bool parse_command(const std::string& cmd);
void handle_command();
bool get_line(std::string& result);
void usage(const char* cmd);
};
inline void CConsole::set_variable(parser::CObjectTreeNode* var)
{
if (m_variable)
{
delete m_variable;
}
m_variable = var;
}
#endif // __CONSOLE_H__