0001
0002 #ifndef _PSLEXER_H_
0003 #define _PSLEXER_H_
0004
0005 #ifdef PSUNICODE
0006 typedef PSChar LexChar;
0007 #else
0008 typedef unsigned char LexChar;
0009 #endif
0010
0011 struct PSLexer
0012 {
0013 PSLexer();
0014 ~PSLexer();
0015 void Init(PSSharedState *ss,PSLEXREADFUNC rg,PSUserPointer up,CompilerErrorFunc efunc,void *ed);
0016 void Error(const PSChar *err);
0017 PSInteger Lex();
0018 const PSChar *Tok2Str(PSInteger tok);
0019 private:
0020 PSInteger GetIDType(const PSChar *s,PSInteger len);
0021 PSInteger ReadString(PSInteger ndelim,bool verbatim);
0022 PSInteger ReadNumber();
0023 void LexBlockComment();
0024 void LexLineComment();
0025 PSInteger ReadID();
0026 void Next();
0027 #ifdef PSUNICODE
0028 #if WCHAR_SIZE == 2
0029 PSInteger AddUTF16(PSUnsignedInteger ch);
0030 #endif
0031 #else
0032 PSInteger AddUTF8(PSUnsignedInteger ch);
0033 #endif
0034 PSInteger ProcessStringHexEscape(PSChar *dest, PSInteger maxdigits);
0035 PSInteger _curtoken;
0036 PSTable *_keywords;
0037 PSBool _reached_eof;
0038 public:
0039 PSInteger _prevtoken;
0040 PSInteger _currentline;
0041 PSInteger _lasttokenline;
0042 PSInteger _currentcolumn;
0043 const PSChar *_svalue;
0044 PSInteger _nvalue;
0045 PSFloat _fvalue;
0046 PSLEXREADFUNC _readf;
0047 PSUserPointer _up;
0048 LexChar _currdata;
0049 PSSharedState *_sharedstate;
0050 psvector<PSChar> _longstr;
0051 CompilerErrorFunc _errfunc;
0052 void *_errtarget;
0053 };
0054
0055 #endif