mediawiki-extensions-AbuseF.../parser_native/afeval.h
Andrew Garrett 016da694a6 Abuse Filter:
* Reimplement tools, starting with a spiffy AJAX expression tester. Didn't bother implementing as non-AJAX, as it's just an extra.
* Change exchange protocol between native parser and PHP app. Resulted in 2-3-fold performance boost.
* Fix minor bug from last night.
2008-08-04 14:27:48 +00:00

42 lines
1.1 KiB
C++
Executable file

#include "afparser.h"
#include "afutils.h"
// #include "aftypes.h"
#include <map>
class FilterEvaluator {
public:
void reset();
void setVar( string key, AFPData value );
void setVars( map<string,AFPData> values );
bool evaluateFilter( string code );
string evaluateExpression( string code );
protected:
bool move();
bool move( int shift );
void doLevelEntry( AFPData* result );
void doLevelSet( AFPData* result );
void doLevelBoolOps( AFPData* result );
void doLevelCompares( AFPData* result );
void doLevelMulRels( AFPData* result );
void doLevelSumRels( AFPData* result );
void doLevelPow( AFPData* result );
void doLevelBoolInvert( AFPData* result );
void doLevelSpecialWords( AFPData* result );
void doLevelUnarys( AFPData* result );
void doLevelBraces( AFPData* result );
void doLevelFunction( AFPData* result );
void doLevelAtom( AFPData* result );
AFPToken cur;
vector<AFPToken> tokens;
map<string, vector<AFPToken> > tokenCache;
unsigned int pos;
string code;
map<string,AFPData> vars;
bool forceResult;
};
// typedef AFPData (*AFPFunction) (vector<AFPData>);
vector<string> getOpsForType( string type );