ot_resrv.cpp
来自「在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己」· C++ 代码 · 共 797 行 · 第 1/4 页
CPP
797 行
// OT_RESRV.CPP
//
// Copyright (c) 1997-2001 Symbian Ltd. All rights reserved.
//
// Reserved word lookup for Opl Lexical scanner
// COplLexBase::IsReserved()
#include "ot_std.h"
const TUint8 KOplAllTargets=KMaxTUint8;
const TUint8 KOplNotOpl1993=TUint8(~(TUint8(KOplTargetOpl1993)));
const TUint8 KOplOpl1993Only=TUint8(KOplTargetOpl1993);
/////////////////////////////////////////////////////////////////
//
// TLookupHeader. Reserved word lookup table entry header
//
////////////////////////////////////////////////////////////////
class TLookupHeader
{
public:
TBool Matches(TOplTranTarget aTarget,const TDesC& anEnd);
public:
TText *iName;
TUint8 iTargets;
TUint8 byte1;
TUint8 byte2;
TUint8 byte3;
};
TBool TLookupHeader::Matches(TOplTranTarget aTarget,const TDesC& aName)
{
return ((aTarget&iTargets) && (aName.Compare(TPtrC(iName))==0));
}
/////////////////////////////////////////////////////////////////
//
// TFunctionLookup - Entry inn the function lookup tables
//
/////////////////////////////////////////////////////////////////
// A whole bunch of defined used in an attempt to make the function lookup table readable
#define TARGETS(t) TUint8(t)
#define RET_TYPE(t) TUint8(t)
#define NUMBER(n) TUint8(n)
#define AOK(n) TUint8(0x01<<n)
#define STATS TUint8(0)
#define ARGSTATS 0
#define ARG1(a) (TUint(a))
#define ARG2(a) (TUint(a)<<4)
#define ARG3(a) (TUint(a)<<8)
#define ARG4(a) (TUint(a)<<12)
#define ARG5(a) (TUint(a)<<16)
#define ARG6(a) (TUint(a)<<20)
#define ARG7(a) (TUint(a)<<24)
// NOTE don't allow ARG 8 so that the final argument can will always be ABAD
// Argument types. NOTE: The +1 is so that uninitialized arguments entries appear as bad ones.
#define ABAD TOplSignature::EArgBadType+1
#define AWORD TOplSignature::EArgWord+1
#define ALONG TOplSignature::EArgLong+1
#define AREAL TOplSignature::EArgReal+1
#define ASTRING TOplSignature::EArgString+1
#define AUWORD TOplSignature::EArgUword+1
#define AWREF TOplSignature::EArgWordRef+1
#define ALREF TOplSignature::EArgLongRef+1
#define ARREF TOplSignature::EArgRealRef+1
#define ASREF TOplSignature::EArgStringRef+1
#define AREF TOplSignature::EArgAnyRef+1
#define AOVER TOplSignature::EArgOverLoad+1
#define ANATIVE TOplSignature::EArgNative+1
#define AUNATIVE TOplSignature::EArgUNative+1
//
// This should be derived from TLookup Header, but I can't seem to find a way to stop the
// compiler whingeing on about can't find TOplFunction (TOplFunction& ) constructor.
// So I just put it straight in there and do some explicit casting in the lookup table.
// Note that another compiler could start rearranging the fields
// so that a TFunctionLookup no longer looks like a TLookupHeader. We'll find out soone enough if this does
// happen, so I'm not fretting too much
//
class TFunctionLookup
{
public:
inline TOplToken::TType ReturnType() const { return TOplToken::TType(byte1);}
inline TOplFunction::TNumber Number() const { return TOplFunction::TNumber(byte2);}
inline TBool IsStatistical() const { return byte3==ARGSTATS;}
inline TBool IsAllowedCount(TUint anArgCount) const { return (1<<anArgCount)&byte3;}
inline TOplSignature::TArgType Arg(TUint n) const {return TOplSignature::TArgType(((iArgs>>(n<<2))&0x0f)-1);}
public:
const TText *iName;
TUint8 iTargets;
TUint8 byte1;
TUint8 byte2;
TUint8 byte3;
TUint iArgs; // Types of the arguments stored as nibbles
};
//////////////////////////////////////////////////////////////////
//
// TKeywordLookup - Entry in the keyword lookup tables
//
///////////////////////////////////////////////////////////////////
class TKeywordLookup
{
public:
inline TOplKeyword::TCode Code() const { return TOplKeyword::TCode(byte1);}
inline TBool Trappable() const { return byte2;}
public:
const TText *iName;
TUint8 iTargets;
TUint8 byte1;
TUint8 byte2;
TUint8 byte3;
};
////////////////////////////////////////////////////////////////////
//
// TReservedLookup - Entry in teh Reserved words lookup table
//
///////////////////////////////////////////////////////////////////
class TReservedLookup
{
public:
inline TOplToken::TValue Token() const { return TOplToken::TValue(TUint(byte2<<8)|byte1);}
public:
const TText *iName;
TUint8 iTargets;
TUint8 byte1;
TUint8 byte2;
TUint8 byte3;
};
////////////////////////////////////////////////////////////////////
//
// Function lookup tables
//
////////////////////////////////////////////////////////////////////;
static const TFunctionLookup functionATable[]=
{
{_S("BS"), KOplAllTargets,RET_TYPE(TOplToken::EReal),NUMBER(TOplFunction::EAbs),AOK(1), ARG1(AREAL)},
{_S("COS"), KOplAllTargets,RET_TYPE(TOplToken::EReal),NUMBER(TOplFunction::EACos),AOK(1),ARG1(AREAL)},
{_S("DDR"), KOplAllTargets,RET_TYPE(TOplToken::ENativeReturn),NUMBER(TOplFunction::EAddr),AOK(1),ARG1(AOVER)},
{_S("DJUSTALLOC"), KOplAllTargets,RET_TYPE(TOplToken::ENativeReturn),NUMBER(TOplFunction::EAdjustAlloc),AOK(3),ARG1(ANATIVE)|ARG2(ANATIVE)|ARG3(ANATIVE)},
{_S("LERT"), KOplAllTargets,RET_TYPE(TOplToken::EWord),NUMBER(TOplFunction::EAlert),AOK(1)|AOK(2)|AOK(3)|AOK(4)|AOK(5),ARG1(ASTRING)|ARG2(ASTRING)|ARG3(ASTRING)|ARG4(ASTRING)|ARG5(ASTRING)},
{_S("LLOC"), KOplAllTargets,RET_TYPE(TOplToken::ENativeReturn),NUMBER(TOplFunction::EAlloc),AOK(1), ARG1(AUNATIVE)},
{_S("SC"), KOplAllTargets,RET_TYPE(TOplToken::EWord),NUMBER(TOplFunction::EAsc),AOK(1),ARG1(ASTRING)},
{_S("SIN"),KOplAllTargets,RET_TYPE(TOplToken::EReal),NUMBER(TOplFunction::EASin),AOK(1),ARG1(AREAL)},
{_S("TAN"), KOplAllTargets,RET_TYPE(TOplToken::EReal),NUMBER(TOplFunction::EATan),AOK(1),ARG1(AREAL)}
};
static const TFunctionLookup functionBTable[]=
{
{_S("OOKMARK"),KOplNotOpl1993,RET_TYPE(TOplToken::EWord),NUMBER(TOplFunction::EBookMark),AOK(0),0}
};
static const TFunctionLookup functionCTable[]=
{
{_S("ALL"), KOplOpl1993Only, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::ECall), AOK(1)|AOK(2)|AOK(3)|AOK(4)|AOK(5)|AOK(6),ARG1(AWORD)|ARG2(AWORD)|ARG3(AWORD)|ARG4(AWORD)|ARG5(AWORD)|ARG6(AWORD)},
{_S("HR$"), KOplAllTargets, RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::EChrS),AOK(1),ARG1(AWORD)},
{_S("MD$"), KOplAllTargets,RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::ECmdS),AOK(1),ARG1(AWORD)},
{_S("OS"), KOplAllTargets,RET_TYPE(TOplToken::EReal), NUMBER(TOplFunction::ECos), AOK(1), ARG1(AREAL)},
{_S("OUNT"), KOplAllTargets,RET_TYPE(TOplToken::EWord),NUMBER(TOplFunction::ECount),AOK(0),0},
{_S("REATESPRITE"), KOplOpl1993Only,RET_TYPE(TOplToken::EWord),NUMBER(TOplFunction::ECreateSprite),AOK(0), 0}
};
static const TFunctionLookup functionDTable[]=
{
{_S("ATETOSECS"), KOplAllTargets, RET_TYPE(TOplToken::ELong), NUMBER(TOplFunction::EDateToSecs),AOK(6), ARG1(AWORD)|ARG2(AWORD)|ARG3(AWORD)|ARG4(AWORD)|ARG5(AWORD)|ARG6(AWORD)},
{_S("ATIM$"), KOplAllTargets, RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::EDatim),AOK(0), 0},
{_S("AY"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EDay),AOK(0), 0},
{_S("AYNAME$"), KOplAllTargets, RET_TYPE(TOplToken::EString),NUMBER(TOplFunction::EDayNameS),AOK(1), ARG1(AWORD)},
{_S("AYS"), KOplAllTargets, RET_TYPE(TOplToken::ELong), NUMBER(TOplFunction::EDays),AOK(3), ARG1(AWORD)|ARG2(AWORD)|ARG3(AWORD)},
{_S("EG"), KOplAllTargets, RET_TYPE(TOplToken::EReal), NUMBER(TOplFunction::EDeg),AOK(1), ARG1(AREAL)},
{_S("IALOG"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EDialog),AOK(0), 0},
{_S("IR$"), KOplAllTargets, RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::EDirS),AOK(1), ARG1(ASTRING)},
{_S("OW"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EDow),AOK(3), ARG1(AWORD)|ARG2(AWORD)|ARG3(AWORD)}
};
static const TFunctionLookup functionETable[]=
{
{_S("NTERSEND"), KOplOpl1993Only, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EEnterSend),AOK(2)|AOK(3)|AOK(4)|AOK(5),ARG1(AWORD)|ARG2(AWORD)|ARG3(AREF)|ARG4(AREF)|ARG5(AREF)},
{_S("NTERSEND0"), KOplOpl1993Only, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EEnterSend0),AOK(2)|AOK(3)|AOK(4)|AOK(5),ARG1(AWORD)|ARG2(AWORD)|ARG3(AREF)|ARG4(AREF)|ARG5(AREF)},
{_S("OF"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EEof),AOK(0), 0},
{_S("RR"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EErr),AOK(0), 0},
{_S("RR$"), KOplAllTargets, RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::EErrS),AOK(1), ARG1(AWORD)},
{_S("RRX$"), KOplNotOpl1993, RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::EErrxS),AOK(0), 0},
{_S("VAL"), KOplAllTargets, RET_TYPE(TOplToken::EReal), NUMBER(TOplFunction::EEval),AOK(1), ARG1(ASTRING)},
{_S("XIST"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EExist),AOK(1), ARG1(ASTRING)},
{_S("XP"), KOplAllTargets, RET_TYPE(TOplToken::EReal), NUMBER(TOplFunction::EExp),AOK(1), ARG1(AREAL)}
};
static const TFunctionLookup functionFTable[]=
{
{_S("IND"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EFind),AOK(1), ARG1(ASTRING)},
{_S("INDFIELD"), KOplAllTargets, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EFindField),AOK(4), ARG1(ASTRING)|ARG2(AWORD)|ARG3(AWORD)|ARG4(AWORD)},
{_S("INDLIB"), KOplOpl1993Only, RET_TYPE(TOplToken::EWord), NUMBER(TOplFunction::EFindLib),AOK(2), ARG1(AWREF)|ARG2(ASTRING)},
{_S("IX$"), KOplAllTargets, RET_TYPE(TOplToken::EString), NUMBER(TOplFunction::EFixS),AOK(3), ARG1(AREAL)|ARG2(AWORD)|ARG3(AWORD)},
{_S("LT"), KOplAllTargets, RET_TYPE(TOplToken::EReal), NUMBER(TOplFunction::EFlt),AOK(1), ARG1(ALONG)}
};
static const TFunctionLookup functionGTable[]=
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?