#include #include #include "ParseHelper.h" #include "ParseListener.h" #include "Interpreter.h" const std::string STD_PROMPT = ">>> "; const std::string MULTILINE_PROMPT = "... "; struct InterpreterRelay : public ParseListener { Interpreter* m_interpreter; InterpreterRelay( ): m_interpreter( new Interpreter ) { } virtual void parseEvent( const ParseMessage& msg ) { if ( msg.errorCode ) { std::cout << "(" << msg.errorCode << ") " << msg.message << "\n"; return; } else { int err; std::string res = m_interpreter->interpret( msg.message, &err ); std::cout << "(" << msg.errorCode << ") " << res << "\n"; } } }; int main( int argc, char *argv[] ) { Interpreter::Initialize( ); const std::string* prompt = &STD_PROMPT; ParseHelper helper; ParseListener* listener = new InterpreterRelay; helper.subscribe( listener ); std::string str; std::cout << *prompt; std::getline( std::cin, str ); while ( str != "quit" ) { std::cout << str << "\n"; helper.process( str ); if ( helper.buffered( ) ) { prompt = &MULTILINE_PROMPT; } else { prompt = &STD_PROMPT; } std::cout << *prompt; std::getline( std::cin, str ); } Interpreter::Finalize( ); return 0; }