00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PARSER_H
00021 #define PARSER_H
00022
00023 #include "config.h"
00024 #include "scanner.h"
00025
00026 #ifndef BUILDING_DOX
00027 # include <string>
00028 #endif
00029
00034 class IBuilder: public IErrorSensitive {
00035 public:
00036 virtual ~IBuilder() { }
00037 virtual void errorDetected() = 0;
00038 virtual void glVar(EToken type, Token id) = 0;
00039 virtual void fncDeclInit(EToken type, Token id) = 0;
00040 virtual void fncDeclArg(EToken type) = 0;
00041 virtual void fncDecl() = 0;
00042 virtual void fncDefInit(EToken type, Token id) = 0;
00043 virtual void fncDefArg(EToken type, Token id) = 0;
00044 virtual void fncDefVar(EToken type, Token id) = 0;
00045 virtual void fncDefBody() = 0;
00046 virtual void fncDef() = 0;
00047 virtual void assign(Token token) = 0;
00048 virtual void ifEnter(Token token) = 0;
00049 virtual void ifElse() = 0;
00050 virtual void ifLeave() = 0;
00051 virtual void whileInit(Token token) = 0;
00052 virtual void whileEnter() = 0;
00053 virtual void whileLeave() = 0;
00054 virtual void pushToken(Token token) = 0;
00055 virtual void evalUnOp(Token token) = 0;
00056 virtual void evalBinOp(Token token) = 0;
00057
00064 virtual void fncCall(Token id, int argsToPop, bool pushResult) = 0;
00065
00071 virtual void fncCallPrint(Token id, EToken valType) = 0;
00072 };
00073
00077 class Parser {
00078 public:
00085 static int parse(IScanner *scanner, IBuilder *builder, std::string fileName);
00086 #ifdef BUILDING_DOX
00087
00088 IScanner *scanner;
00089 Builder *builder;
00090 #endif
00091 private:
00092 Parser();
00093 };
00094
00095 #endif