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