sqlexer.h
00001
00002 #ifndef _SQLEXER_H_
00003 #define _SQLEXER_H_
00004
00005 #ifdef SQUNICODE
00006 typedef SQChar LexChar;
00007 #else
00008 typedef unsigned char LexChar;
00009 #endif
00010
00011 struct SQLexer
00012 {
00013 SQLexer();
00014 ~SQLexer();
00015 void Init(SQSharedState *ss,SQLEXREADFUNC rg,SQUserPointer up,CompilerErrorFunc efunc,void *ed);
00016 void Error(const SQChar *err);
00017 SQInteger Lex();
00018 const SQChar *Tok2Str(SQInteger tok);
00019 private:
00020 SQInteger GetIDType(SQChar *s);
00021 SQInteger ReadString(SQChar ndelim,bool verbatim);
00022 SQInteger ReadNumber();
00023 void LexBlockComment();
00024 SQInteger ReadID();
00025 void Next();
00026 SQInteger _curtoken;
00027 SQTable *_keywords;
00028 public:
00029 SQInteger _prevtoken;
00030 SQInteger _currentline;
00031 SQInteger _lasttokenline;
00032 SQInteger _currentcolumn;
00033 const SQChar *_svalue;
00034 SQInteger _nvalue;
00035 SQFloat _fvalue;
00036 SQLEXREADFUNC _readf;
00037 SQUserPointer _up;
00038 LexChar _currdata;
00039 SQSharedState *_sharedstate;
00040 sqvector<SQChar> _longstr;
00041 CompilerErrorFunc _errfunc;
00042 void *_errtarget;
00043 };
00044
00045 #endif