CommandParser.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef COMMANDPARSER_HPP
00039 #define COMMANDPARSER_HPP
00040
00041 #include "parser-types.hpp"
00042 #include "../PropertyBag.hpp"
00043 #include "CommonParser.hpp"
00044 #include "ExpressionParser.hpp"
00045 #include "PeerParser.hpp"
00046
00047 #ifdef ORO_PRAGMA_INTERFACE
00048 #pragma interface
00049 #endif
00050
00051 namespace RTT
00052 {
00053 class DispatchInterface;
00054 namespace detail {
00055
00056
00064 class CommandParser
00065 {
00066
00067
00068 std::string mcurobject;
00069
00070
00071 std::string mcurmethod;
00072
00073
00074 bool mas_action;
00075
00076 DispatchInterface* dcom;
00077 CommandInterface* retcommand;
00078 ConditionInterface* implicittermcondition;
00079 ConditionInterface* dispatchCond;
00080 TaskContext* peer;
00081
00082 void seenmethodname( iter_t begin, iter_t end )
00083 {
00084 std::string methodname( begin, end );
00085 mcurmethod = methodname;
00086 };
00087
00088 void seenstartofcall();
00089 void seennopcommand();
00090
00091 void seencallcommand();
00092
00093 rule_t objectmethod, command, callcommand, nopcommand, arguments;
00094
00095 TaskContext* context;
00096 CommonParser& commonparser;
00097 ArgumentsParser* argsparser;
00098 ExpressionParser expressionparser;
00099 PeerParser peerparser;
00100 public:
00107 CommandParser( TaskContext* context, CommonParser& cp, bool as_action );
00108 ~CommandParser();
00109
00110 bool foundObject() {
00111 return !mcurobject.empty();
00112 }
00113 bool foundMethod() {
00114 return !mcurmethod.empty();
00115 }
00116
00117 rule_t& parser()
00118 {
00119 return command;
00120 };
00121
00126 ConditionInterface* wrapCondition( ConditionInterface* );
00127
00136 ConditionInterface* dispatchCondition();
00137
00143 CommandInterface* getCommand()
00144 {
00145 return retcommand;
00146 }
00147
00153 ConditionInterface* getImplTermCondition()
00154 {
00155 return implicittermcondition;
00156 }
00157
00162 void reset();
00163 };
00164 }}
00165
00166 #endif