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
00027 #ifndef SHTOKENIZER_HPP
00028 #define SHTOKENIZER_HPP
00029
00030 #include <stack>
00031 #include <queue>
00032 #include <vector>
00033 #include <iosfwd>
00034 #include "ShDllExport.hpp"
00035 #include "ShRefCount.hpp"
00036 #include "ShVariable.hpp"
00037 #include "ShBlock.hpp"
00038 #include "ShException.hpp"
00039 #include "ShToken.hpp"
00040
00041 namespace SH {
00042
00048 struct
00049 SH_DLLEXPORT ShTokenArgument {
00050 ShTokenArgument(const ShVariable& result, const ShBlockListPtr& blockList)
00051 : result(result), blockList(blockList)
00052 {
00053 }
00054
00055 ShVariable result;
00056 ShBlockListPtr blockList;
00057 };
00058
00063 class
00064 SH_DLLEXPORT ShTokenizerException : public ShException {
00065 public:
00066 ShTokenizerException(const std::string& error);
00067 };
00068
00078 class
00079 SH_DLLEXPORT ShTokenizer {
00080 public:
00081 ShTokenizer();
00082
00088
00089
00090 bool pushArgQueue();
00092 bool pushArg();
00094 bool processArg(const ShVariable& result);
00096
00098
00099
00100 ShTokenArgument getArgument();
00102 void popArgQueue();
00104
00106 ShBlockListPtr blockList();
00107
00108 private:
00109 std::stack<ShBlockListPtr> m_listStack;
00110 std::stack< std::queue<ShTokenArgument> > m_argQueueStack;
00111 };
00112
00113 }
00114
00115 #endif