ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/selection/SelectionEvaluator.hpp
(Generate patch)

Comparing trunk/OOPSE-3.0/src/selection/SelectionEvaluator.hpp (file contents):
Revision 1961 by tim, Tue Feb 1 06:55:00 2005 UTC vs.
Revision 1966 by tim, Thu Feb 3 14:04:59 2005 UTC

# Line 53 | Line 53 | namespace oopse {
53  
54   namespace oopse {
55  
56 + class Context {
57 +    public:
58 +        
59 +        void clear() {
60 +            linenumbers.clear();
61 +            lineIndices.clear();
62 +            aatoken.clear();
63 +        }
64 +        
65 +        std::string filename;
66 +        std::string script;
67 +        std::vector<int> linenumbers;
68 +        std::vector<int> lineIndices;
69 +        std::vector<std::vector<Token> > aatoken;
70 +        int pc;
71 + };
72 +
73   /**
74   * @class SelectionEvaluator SelectionEvaluator.hpp "selection/SelectionEvaluator"
75   * @brief Evalute the tokens compiled by SelectionCompiler and return a BitSet
# Line 62 | Line 79 | class SelectionEvaluator{
79  
80          SelectionEvaluator(SimInfo* info, const std::string& script);
81  
82 +
83          BitSet evaluate();
84          
85          BitSet evaluate(int frameNo);
# Line 71 | Line 89 | class SelectionEvaluator{
89           * @return true if the result keeps the same even the frame change, otherwise return false
90           */        
91          bool isStatic();
92 <        
92 >
93 >        bool hadRuntimeError() const{
94 >            return error;
95 >        }
96 >
97 >        std::string getErrorMessage() const {
98 >            return errorMessage;
99 >        }
100 >
101 >
102 >        int getLinenumber() {
103 >            return linenumbers[pc];
104 >        }
105 >
106 >        std::string getLine() {
107 >            int ichBegin = lineIndices[pc];
108 >            int ichEnd;
109 >            if ((ichEnd = script.find('\r', ichBegin)) == std::string::npos &&
110 >                (ichEnd = script.find('\n', ichBegin)) == std::string::npos) {
111 >                ichEnd = script.size();
112 >            }            
113 >            return script.substr(ichBegin, ichEnd);
114 >        }
115 >  
116      private:
117  
118 <        /** */
119 <        void define();
118 >        void clearState();
119 >        
120 >        bool loadScript(const std::string& filename, const std::string& script);
121 >        bool loadScriptString(const std::string& script);
122 >        bool loadScriptFileInternal(const std::string& filename);
123 >        bool loadScriptFile(const std::string& filename);
124  
125 <        /** */
125 >        void clearDefinitionsAndLoadPredefined();
126 >        
127 >        void define();
128 >        void select();
129          void predefine();
130  
131 <        withinInstruction(Token instruction, BitSet , BitSet);
131 >        void instructionDispatchLoop();
132  
133 +        void withinInstruction(const Token& instruction, BitSet& , BitSet&);
134 +
135          BitSet expression(std::vector<Token>& tokens, int pc);
136 +
137 +
138 +        void evalError(const std::string& message);
139 +
140 +        void unrecognizedCommand(const Token& token) {
141 +            evalError("unrecognized command:" + token.value);
142 +        }        
143          
144 <        SimInfo* info_;
144 >        SelectionCompiler compiler;
145  
146 <        std::map<std::string, std::vector<Token> > variables_;
147 <        std::string script_;
146 >        const static int scriptLevelMax = 10;
147 >        int scriptLevel;
148 >
149 >        Context stack[scriptLevelMax];
150 >
151 >        std::string filename;
152 >        std::string script;
153 >        std::vector<int> linenumbers;
154 >        std::vector<int> lineIndices;
155 >        std::vector<std::vector<Token> > aatoken;
156 >        int pc; // program counter
157 >
158 >        bool error;
159 >        std::string errorMessage;
160 >
161 >        std::vector<Token> statement;
162 >        int statementLength;
163 >
164 >        SimInfo* info;
165 >
166 >        std::map<std::string, std::vector<Token> > variables;
167   };
168  
169   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines