// Set implementation // Matt Perry (mjperry2@uiuc.edu) #ifndef PARSER_H #define PARSER_H #include "element.h" #include "set.h" class Parser { public: char* expr; enum TokenType { END=0, NUMBER=1, STRING=2, SET=3, VAR=4, ERROR=5, ASSIGN=':', LP='(', RP=')', LB='{', RB='}', COMMA=',', UNION='+', // set ops INTERSECTION='^', DIFF='-', SYMDIFF='/', POWERSET='@', SUBSET, // test ops PROPER_SUBSET='<', EQUAL='=', NOTEQUAL, INSET='[', NOTINSET, SIZE='|' }; struct Token { TokenType type; Element e; char var; Token() {} Token(TokenType t) : type(t) {} Token(TokenType t, Element _e) : type(t), e(_e) {} Token(Set s) : type(SET), e(s) {} }; Token curtok; bool got_error; public: Parser(char* _expr) : expr(_expr), got_error(false) {} Token eval(); Token assign(); Token testop(); Token setop(); Token getelem(); Token getset(); Token get_token(); Token expand(const Token& tok); Token error(char*); }; #endif // parser.h