Back to home page

Enduro/X

 
 

    


0001 /*  see copyright notice in pscript.h */
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