| #include <iostream> | |
| #include <string> | |
| #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; | |
| } |