Mercurial > jwe > qt-gui-with-push-parser
comparison interpreter.cpp @ 12:894be158b32d
define parser as a class and eliminate some global variables
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 23 May 2019 17:57:20 -0400 |
parents | 822a2fe5bb51 |
children | 1e5a1e15fa56 |
comparison
equal
deleted
inserted
replaced
11:b652a5528fb1 | 12:894be158b32d |
---|---|
12 namespace calc | 12 namespace calc |
13 { | 13 { |
14 interpreter *interpreter::the_interpreter = nullptr; | 14 interpreter *interpreter::the_interpreter = nullptr; |
15 | 15 |
16 interpreter::interpreter (void) | 16 interpreter::interpreter (void) |
17 : m_error_handler ([] (const char *msg) | 17 : m_parser (*this), |
18 m_error_handler ([] (const char *msg) | |
18 { std::cerr << "error: " << msg << std::endl; }), | 19 { std::cerr << "error: " << msg << std::endl; }), |
19 m_result_handler ([] (double value) | 20 m_result_handler ([] (double value) |
20 { std::cout << "ans = " << value << std::endl; }) | 21 { std::cout << "ans = " << value << std::endl; }) |
21 { | 22 { |
22 if (the_interpreter) | 23 if (the_interpreter) |
24 std::cerr << "multiple interpreters are not possible!" << std::endl; | 25 std::cerr << "multiple interpreters are not possible!" << std::endl; |
25 exit (1); | 26 exit (1); |
26 } | 27 } |
27 | 28 |
28 the_interpreter = this; | 29 the_interpreter = this; |
29 | |
30 parser::init (); | |
31 } | |
32 | |
33 interpreter::~interpreter (void) | |
34 { | |
35 parser::fini (); | |
36 } | 30 } |
37 | 31 |
38 int interpreter::parse_and_execute (const std::string& line) | 32 int interpreter::parse_and_execute (const std::string& line) |
39 { | 33 { |
40 return parser::parse_and_execute (line); | 34 return m_parser.parse_and_execute (line); |
41 } | 35 } |
42 | 36 |
43 void interpreter::emit_result (double value) | 37 void interpreter::emit_result (double value) const |
44 { | 38 { |
45 // Simulate a delay in calculation. | 39 // Simulate a delay in calculation. |
46 sleep (1); | 40 sleep (1); |
47 | 41 |
48 m_result_handler (value); | 42 m_result_handler (value); |
49 } | 43 } |
50 | 44 |
51 void interpreter::emit_error (const char *msg) | 45 void interpreter::emit_error (const char *msg) const |
52 { | 46 { |
53 m_error_handler (msg); | 47 m_error_handler (msg); |
54 } | 48 } |
55 } | 49 } |