mirror of
https://github.com/moparisthebest/Simba
synced 2024-11-18 15:25:00 -05:00
323 lines
6.4 KiB
ObjectPascal
323 lines
6.4 KiB
ObjectPascal
|
{---------------------------------------------------------------------------
|
||
|
The contents of this file are subject to the Mozilla Public License Version
|
||
|
1.1 (the "License"); you may not use this file except in compliance with the
|
||
|
License. You may obtain a copy of the License at
|
||
|
http://www.mozilla.org/NPL/NPL-1_1Final.html
|
||
|
|
||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
||
|
the specific language governing rights and limitations under the License.
|
||
|
|
||
|
The Original Code is: mwPasLexTypes, released November 14, 1999.
|
||
|
|
||
|
The Initial Developer of the Original Code is Martin Waldenburg
|
||
|
unit CastaliaPasLexTypes;
|
||
|
|
||
|
----------------------------------------------------------------------------}
|
||
|
|
||
|
unit CastaliaPasLexTypes;
|
||
|
|
||
|
{$include ValistusDefines.inc}
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses SysUtils, TypInfo;
|
||
|
|
||
|
var
|
||
|
CompTable: array[#0..#255] of byte;
|
||
|
|
||
|
type
|
||
|
|
||
|
TMessageEventType = ( meError, meNotSupported );
|
||
|
|
||
|
TMessageEvent = procedure(Sender: TObject; const Typ : TMessageEventType; const Msg: string; X, Y: Integer ) of object; //jdj 7/16/1999; DR 2001-11-06
|
||
|
|
||
|
TCommentState = (csAnsi, csBor, csNo);
|
||
|
|
||
|
TTokenPoint = packed record
|
||
|
X : Integer;
|
||
|
Y : Integer;
|
||
|
end;
|
||
|
|
||
|
TptTokenKind = (
|
||
|
tokAbort, //JThurman 2004-11-8 (flow control routines)
|
||
|
tokAbsolute,
|
||
|
tokAbstract,
|
||
|
tokAdd,
|
||
|
tokAddressOp,
|
||
|
tokAmpersand,
|
||
|
tokAnd,
|
||
|
tokAnsiComment,
|
||
|
tokAnsiString,
|
||
|
tokArray,
|
||
|
tokAs,
|
||
|
tokAsciiChar,
|
||
|
tokAsm,
|
||
|
tokAssembler,
|
||
|
tokAssign,
|
||
|
tokAt,
|
||
|
tokAutomated,
|
||
|
tokBegin,
|
||
|
tokBoolean,
|
||
|
tokBorComment,
|
||
|
tokBraceClose,
|
||
|
tokBraceOpen,
|
||
|
tokBreak, //JThurman 2004-11-8 (flow control routines)
|
||
|
tokByte,
|
||
|
tokByteBool,
|
||
|
tokCardinal,
|
||
|
tokCase,
|
||
|
tokCdecl,
|
||
|
tokChar,
|
||
|
tokClass,
|
||
|
tokClassForward,
|
||
|
tokClassFunction,
|
||
|
tokClassProcedure,
|
||
|
tokColon,
|
||
|
tokComma,
|
||
|
tokComp,
|
||
|
tokCompDirect,
|
||
|
tokConst,
|
||
|
tokConstructor,
|
||
|
tokContains,
|
||
|
tokContinue, //JThurman 2004-11-8 (flow control routines)
|
||
|
tokCRLF,
|
||
|
tokCRLFCo,
|
||
|
tokCurrency,
|
||
|
tokDefault,
|
||
|
tokDefineDirect,
|
||
|
tokDeprecated, // DR 2001-10-20
|
||
|
tokDestructor,
|
||
|
tokDispid,
|
||
|
tokDispinterface,
|
||
|
tokDiv,
|
||
|
tokDo,
|
||
|
tokDotDot,
|
||
|
tokDouble,
|
||
|
tokDoubleAddressOp,
|
||
|
tokDownto,
|
||
|
tokDWORD,
|
||
|
tokDynamic,
|
||
|
tokElse,
|
||
|
tokElseDirect,
|
||
|
tokEnd,
|
||
|
tokEndIfDirect,
|
||
|
tokEqual,
|
||
|
tokError,
|
||
|
tokExcept,
|
||
|
tokExit, //JThurman 2004-11-8 (flow control routine)
|
||
|
tokExport,
|
||
|
tokExports,
|
||
|
tokExtended,
|
||
|
tokExternal,
|
||
|
tokFar,
|
||
|
tokFile,
|
||
|
{$IFDEF D8_NEWER} //JThurman 2004-03-20
|
||
|
tokFinal,
|
||
|
{$ENDIF}
|
||
|
tokFinalization,
|
||
|
tokFinally,
|
||
|
tokFloat,
|
||
|
tokFor,
|
||
|
tokForward,
|
||
|
tokFunction,
|
||
|
tokGoto,
|
||
|
tokGreater,
|
||
|
tokGreaterEqual,
|
||
|
tokHalt, //JThurman 2004-11-8 (flow control routines)
|
||
|
{$IFDEF D8_NEWER} //JThurman 2004-04-06
|
||
|
tokHelper,
|
||
|
{$ENDIF}
|
||
|
tokIdentifier,
|
||
|
tokIf,
|
||
|
tokIfDirect,
|
||
|
tokIfEndDirect,
|
||
|
tokElseIfDirect,
|
||
|
tokIfDefDirect,
|
||
|
tokIfNDefDirect,
|
||
|
tokIfOptDirect,
|
||
|
tokImplementation,
|
||
|
tokImplements,
|
||
|
tokIn,
|
||
|
tokIncludeDirect,
|
||
|
tokIndex,
|
||
|
tokInherited,
|
||
|
tokInitialization,
|
||
|
tokInline,
|
||
|
tokInt64,
|
||
|
tokInteger,
|
||
|
tokIntegerConst,
|
||
|
tokInterface,
|
||
|
tokIs,
|
||
|
tokLabel,
|
||
|
tokLibrary,
|
||
|
tokLocal, // DR 2001-11-14
|
||
|
tokLongBool,
|
||
|
tokLongint,
|
||
|
tokLongword,
|
||
|
tokLower,
|
||
|
tokLowerEqual,
|
||
|
tokMessage,
|
||
|
tokMinus,
|
||
|
tokMod,
|
||
|
tokName,
|
||
|
tokNear,
|
||
|
tokNil,
|
||
|
tokNodefault,
|
||
|
tokNone,
|
||
|
tokNot,
|
||
|
tokNotEqual,
|
||
|
tokNull,
|
||
|
tokObject,
|
||
|
tokOf,
|
||
|
tokOleVariant,
|
||
|
tokOn,
|
||
|
{$IFDEF D8_NEWER} //JThurman 2004-03-20
|
||
|
tokOperator,
|
||
|
{$ENDIF}
|
||
|
tokOr,
|
||
|
tokOut,
|
||
|
tokOverload,
|
||
|
tokOverride,
|
||
|
tokPackage,
|
||
|
tokPacked,
|
||
|
tokPascal,
|
||
|
tokPChar,
|
||
|
tokPlatform, // DR 2001-10-20
|
||
|
tokPlus,
|
||
|
tokPoint,
|
||
|
tokPointerSymbol,
|
||
|
tokPrivate,
|
||
|
tokProcedure,
|
||
|
tokProgram,
|
||
|
tokProperty,
|
||
|
tokProtected,
|
||
|
tokPublic,
|
||
|
tokPublished,
|
||
|
tokRaise,
|
||
|
tokRead,
|
||
|
tokReadonly,
|
||
|
tokReal,
|
||
|
tokReal48,
|
||
|
tokRecord,
|
||
|
{$IFDEF D12_NEWER}
|
||
|
tokReference, //JThurman 2008-25-07 (anonymous methods)
|
||
|
{$ENDIF}
|
||
|
tokRegister,
|
||
|
tokReintroduce,
|
||
|
tokRemove,
|
||
|
tokRepeat,
|
||
|
tokRequires,
|
||
|
tokResident,
|
||
|
tokResourceDirect,
|
||
|
tokResourcestring,
|
||
|
tokRoundClose,
|
||
|
tokRoundOpen,
|
||
|
tokRunError, //JThurman 2004-11-8 (flow control routines)
|
||
|
tokSafeCall,
|
||
|
{$IFDEF D8_NEWER} //JThurman 2004-03-19
|
||
|
tokSealed,
|
||
|
{$ENDIF}
|
||
|
tokSemiColon,
|
||
|
tokSet,
|
||
|
tokShl,
|
||
|
tokShortint,
|
||
|
tokShortString,
|
||
|
tokShr,
|
||
|
tokSingle,
|
||
|
tokSlash,
|
||
|
tokSlashesComment,
|
||
|
tokSmallint,
|
||
|
tokSpace,
|
||
|
tokSquareClose,
|
||
|
tokSquareOpen,
|
||
|
tokStar,
|
||
|
{$IFDEF D8_NEWER} //JThurman 2004-03-20
|
||
|
tokStatic,
|
||
|
{$ENDIF}
|
||
|
tokStdcall,
|
||
|
tokStored,
|
||
|
{$IFDEF D8_NEWER}
|
||
|
tokStrict, //JThurman 2004-03-03
|
||
|
{$ENDIF}
|
||
|
tokString,
|
||
|
tokStringConst,
|
||
|
tokStringDQConst, // 2002-01-14
|
||
|
tokStringresource,
|
||
|
tokSymbol,
|
||
|
tokThen,
|
||
|
tokThreadvar,
|
||
|
tokTo,
|
||
|
tokTry,
|
||
|
tokType,
|
||
|
tokUndefDirect,
|
||
|
tokUnit,
|
||
|
tokUnknown,
|
||
|
{$IFDEF D8_NEWER} //JThurman 2004-03-2003
|
||
|
tokUnsafe,
|
||
|
{$ENDIF}
|
||
|
tokUntil,
|
||
|
tokUses,
|
||
|
tokVar,
|
||
|
tokVarargs, // DR 2001-11-14
|
||
|
tokVariant,
|
||
|
tokVirtual,
|
||
|
tokWhile,
|
||
|
tokWideChar,
|
||
|
tokWideString,
|
||
|
tokWith,
|
||
|
tokWord,
|
||
|
tokWordBool,
|
||
|
tokWrite,
|
||
|
tokWriteonly,
|
||
|
tokXor,
|
||
|
|
||
|
tok_DONE);
|
||
|
|
||
|
TmwPasLexStatus = record
|
||
|
CommentState: TCommentState;
|
||
|
ExID: TptTokenKind;
|
||
|
LineNumber: Integer;
|
||
|
LinePos: Integer;
|
||
|
Origin: PAnsiChar;
|
||
|
RunPos: Integer;
|
||
|
TokenPos: Integer;
|
||
|
TokenID: TptTokenKind;
|
||
|
end;
|
||
|
|
||
|
const ExTypes = [tokDWORD, tokUnknown];
|
||
|
|
||
|
function TokenName(Value: TptTokenKind): string;
|
||
|
function tokTokenName(Value: TptTokenKind): string;
|
||
|
function IsTokenIDJunk(const aTokenID : TptTokenKind ) :Boolean; //XM 20001210
|
||
|
|
||
|
implementation
|
||
|
|
||
|
function TokenName(Value: TptTokenKind): string;
|
||
|
begin //jdj 7/18/1999
|
||
|
Result := Copy(tokTokenName(Value), 4, MaxInt);
|
||
|
end;
|
||
|
|
||
|
function tokTokenName(Value: TptTokenKind): string;
|
||
|
begin
|
||
|
result := GetEnumName(TypeInfo(TptTokenKind), Integer(Value));
|
||
|
end;
|
||
|
|
||
|
function IsTokenIDJunk(const aTokenID : TptTokenKind ) :boolean; //XM 20001210
|
||
|
begin
|
||
|
Result := aTokenID in [tokAnsiComment, tokBorComment, tokCRLF, tokCRLFCo, tokSlashesComment, tokSpace,
|
||
|
tokIfDirect,
|
||
|
tokIfEndDirect,
|
||
|
tokElseIfDirect,
|
||
|
tokIfDefDirect,
|
||
|
tokIfNDefDirect,
|
||
|
tokEndIfDirect,
|
||
|
tokIfOptDirect,
|
||
|
tokDefineDirect,
|
||
|
tokUndefDirect];
|
||
|
end;
|
||
|
|
||
|
|
||
|
end.
|
||
|
|