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 }