diff 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
line wrap: on
line diff
--- a/interpreter.cpp	Thu May 23 13:42:57 2019 -0400
+++ b/interpreter.cpp	Thu May 23 17:57:20 2019 -0400
@@ -14,7 +14,8 @@
   interpreter *interpreter::the_interpreter = nullptr;
 
   interpreter::interpreter (void)
-    : m_error_handler ([] (const char *msg)
+    : m_parser (*this),
+      m_error_handler ([] (const char *msg)
                        { std::cerr << "error: " << msg << std::endl; }),
       m_result_handler ([] (double value)
                         { std::cout << "ans = " << value << std::endl; })
@@ -26,21 +27,14 @@
       }
 
     the_interpreter = this;
-
-    parser::init ();
-  }
-
-  interpreter::~interpreter (void)
-  {
-    parser::fini ();
   }
 
   int interpreter::parse_and_execute (const std::string& line)
   {
-    return parser::parse_and_execute (line);
+    return m_parser.parse_and_execute (line);
   }
 
-  void interpreter::emit_result (double value)
+  void interpreter::emit_result (double value) const
   {
     // Simulate a delay in calculation.
     sleep (1);
@@ -48,7 +42,7 @@
     m_result_handler (value);
   }
 
-  void interpreter::emit_error (const char *msg)
+  void interpreter::emit_error (const char *msg) const
   {
     m_error_handler (msg);
   }