亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? untpasscriptcompile.pas

?? 運用delphi編寫的小型解釋器
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
unit untPasScriptCompile;

interface

Uses
  Variants, Windows, Messages, Classes, SysUtils, MConnect, ScktComp, WinSock,
  WinInet, ComObj, Dialogs;

Type
  TCharSet = Set of char;

Const
  { 源程序字符集 }
  WhiteSpaces: TCharSet = ['+', '-', '/', '*', '(', ')', ':', '=', ',', ';', '>', '<',
                           '$', '.', '#', '[', ']', '^', '@', '&', '~', '|', '%'];

  BlackSpaces: TCharSet = [#1..#32];

  StopChars: TCharSet = [#0..#32, '+', '-', '/', '*', '(', ')', ':', '=', ',', '''',
                         '{', '}', ';', '>', '<', '$', '.', '#', '[', ']', '"', '^',
                         '@', '&', '~', '|', '%'];

  FirstIdentChar: TCharSet = ['A'..'Z', 'a'..'z', '_'];

  IdentBackChars: TCharSet = ['A'..'Z', 'a'..'z', '_', '0'..'9'];

  Digit: TCharSet = ['0'..'9'];
  
  HexDigit: TCharSet = ['0'..'9', 'A'..'F'];
  

  { 單個保留字符 Reserve Char  }
  rcidEndOfFile                 = 0;
  rcidEndOfLine                 = 13;
  rcidNewLine                   = 10;
  rcidPower                     = Integer('^');
  rcidPoint                     = Integer('.');
  rcidDelimeter                 = Integer(';');
  rcidGreater                   = Integer('>');
  rcidLess                      = Integer('<');
  rcidComma                     = Integer(',');
  rcidPlus                      = Integer('+');
  rcidMinus                     = Integer('-');
  rcidSlash                     = Integer('/');
  rcidStar                      = Integer('*');
  rcidOpenBracket               = Integer('(');
  rcidCloseBracket              = Integer(')');
  rcidOpenComment               = Integer('{');
  rcidCloseComment              = Integer('}');
  rcidEqual                     = Integer('=');
  rcidNotEqual                  = integer('#');
  rcid2Points                   = Integer(':');
  rcidStringChar                = Integer('''');
  rc2idStringChar               = Integer('"');
  rcidSqopenBracket             = integer('[');
  rcidSqcloseBracket            = integer(']');
  

  { 保留字 Reserve Word }
  ReserveWordBase = 1000;
  ReserveWordEnd = 1999;

  rwidProgram =                ReserveWordBase + 0;
  rwidLabel   =                ReserveWordBase + 1;
  rwidGoto    =                ReserveWordBase + 2;
  rwidVar     =                ReserveWordBase + 3;
  rwidBegin   =                ReserveWordBase + 4;
  rwidEnd     =                ReserveWordBase + 5;
  rwidAnd     =                ReserveWordBase + 6;
  rwidOr      =                ReserveWordBase + 7;
  rwidXor     =                ReserveWordBase + 8;
  rwidNot     =                ReserveWordBase + 9;
  rwidShl     =                ReserveWordBase + 10;
  rwidShr     =                ReserveWordBase + 11;
  rwidDiv     =                ReserveWordBase + 12;
  rwidMod     =                ReserveWordBase + 13;
  rwidTrue    =                ReserveWordBase + 14;
  rwidFalse   =                ReserveWordBase + 15;
  rwidIf      =                ReserveWordBase + 16;
  rwidThen    =                ReserveWordBase + 17;
  rwIdElse    =                ReserveWordBase + 18;
  rwidWhile   =                ReserveWordBase + 19;
  rwidRepeat  =                ReserveWordBase + 20;
  rwidUntil   =                ReserveWordBase + 21;
  rwidFor     =                ReserveWordBase + 22;
  rwidTo      =                ReserveWordBase + 23;
  rwidDownto  =                ReserveWordBase + 24;
  rwidDo      =                ReserveWordBase + 25;
  rwidNil     =                ReserveWordBase + 27;
  rwidNull    =                ReserveWordBase + 28;
  rwidUnitinit  =              ReserveWordBase + 31;
  rwidUnitfinal =              ReserveWordBase + 32;
  rwidClass     =              ReserveWordBase + 33;
  rwidType      =              ReserveWordBase + 34;
  rwidConstr    =              ReserveWordBase + 35;
  rwidDestr     =              ReserveWordBase + 36;
  rwidUses      =              ReserveWordBase + 37;
  rwidUnit      =              ReserveWordBase + 38;
  rwidInterface =              ReserveWordBase + 39;
  rwidImplement =              ReserveWordBase + 40;
  rwidProcedure =              ReserveWordBase + 41;
  rwidPrivate   =              ReserveWordBase + 42;
  rwidPublic    =              ReserveWordBase + 43;
  rwidProtected =              ReserveWordBase + 44;
  rwidPublished =              ReserveWordBase + 45;
  rwidFunction  =              ReserveWordBase + 46;
  rwidConst     =              ReserveWordBase + 47;
  rwidProperty  =              ReserveWordBase + 48;
  rwidVirtual   =              ReserveWordBase + 49;
  rwidOverride  =              ReserveWordBase + 50;
  rwidDynamic   =              ReserveWordBase + 51;
  rwidRecord    =              ReserveWordBase + 52;
  rwidForward   =              ReserveWordBase + 53;
  rwidIndex     =              ReserveWordBase + 54;
  rwidRead      =              ReserveWordBase + 55;
  rwidWrite     =              ReserveWordBase + 56;
  rwidStored    =              ReserveWordBase + 57;
  rwidDefault   =              ReserveWordBase + 58;
  rwidAbstract  =              ReserveWordBase + 59;
  rwidStdcall   =              ReserveWordBase + 69;

  { 用戶自定義的標識 User Define Identifier }
  UserDefineIdentBase        = 256;
  udIdentifier               = UserDefineIdentBase + 0;
  udStringConst              = UserDefineIdentBase + 1;
  udNumberConst              = UserDefineIdentBase + 2;
  udHexConst                 = UserDefineIdentBase + 6;

  { PCode命令常量 }
  ocAdd                      = 0;
  ocSub                      = 1;
  ocMul                      = 2;
  ocDiv                      = 3;
  ocMod                      = 4;
  ocSlash                    = 5;
  ocShl                      = 6;
  ocShr                      = 7;
  ocNot                      = 8;
  ocOr                       = 9;
  ocXor                      = 10;
  ocAnd                      = 11;
  ocGreaterEqual             = 12;
  ocEqual                    = 13;
  ocLessEqual                = 14;
  ocNotEqual                 = 15;
  ocGreater                  = 16;
  ocLess                     = 17;
  ocNeg                      = 18;
  ocGoto                     = 19;
  ocIF                       = 20;
  ocIfFalseGoto              = 21;
  ocLoadConst                = 23;
  ocHalt                     = 26;
  ocIncVar                   = 29;
  ocDecVar                   = 30;
  ocBackDode                 = 34;
  ocExtFun                   = 42;
  ocExtProc                  = 43;
  ocSetSelf                  = 44;
  ocLoadextvar               = 45;
  ocStoreextvar              = 46;
  ocSelffromvar              = 47;
  ocMov                      = 48;
  ocCall                     = 49;
  ocReturn                   = 50;
  ocVarraycreate             = 51;
  ocSetvarray                = 52;
  ocSto                      = 53;
  
type
  TToken = record
    ID: Integer;
    Data: Variant;
  end;

  TTokenReader = class
  private
    FSourceCode: string;
    FCurPos: integer;
    FSourceLen: integer;
    FCurToken: TToken;

    FResWords: TStringList;        //保留字

    function ReadByte: byte;
    function NextByte: byte;
    function Next2Byte: byte;
    procedure BackByte(aNum: integer);

    procedure SetSourceCode(aSrcCode: string);
    function GetSourceCode: string;

    { 濾去不可見字符 }
    procedure FilterBalckChar;
    { 濾去注釋 }
    procedure FilterNote;
    { 濾去不可見字符和注釋 }
    procedure FilterBlackAndNote;

    function SetToken(ID: integer; V: Variant): TToken;

    { 讀出字符串常量 }
    function getStringConst: TToken;
    { 讀出數字常量 }
    function getNumberConst: TToken;

    { 是否是保留字符 }
    function IsReserveChar(aChar: char): boolean;
    { 讀出保留字符 }
    function getReserveChar: TToken;

    { 讀出用戶標識符或保留字 }
    function getIdentOrReservWord: TToken;    

    procedure Error(astr: string);

    function ReadToken: TToken;
    function NextToken: TToken;
    function Next2Token: TToken;

    procedure getDelimeter;
    procedure getComma;
    procedure getCloseBracket;

    function GetCurToken: TToken;
  public
      
    constructor Create;
    destructor Destroy; override;

    property CurToken: TToken read GetCurToken;
    property SourceCode: string read GetSourceCode write SetSourceCode;
  end;


  TVarType = (vtStatic, vtDynamic, vtParam, vtResult);
  TDataType = (dtUnknown, dtInt, dtFloat, dtBool, dtStr, dtDateTime, dtOther);

  TUserVar = class
  private
    FID: Integer;
    FName: string;
    FValue: variant;

    FDataType: TDataType;

    FVarType: TVarType;  //變量類別,靜態變量,動態變量,參數變量
    FOffPos: integer;        //位移

    function getText: string;

  public
    procedure Clone(aUserVar: TUserVar);

    property ID: integer read FID write FID;
    property Name: string read FName write FName;
    property Value: variant read FValue write FValue;
    property DataType: TDataType read FDataType write FDataType;
    property VarType: TVarType read FVarType write FVarType;
    property OffPos: integer read FOffPos write FOffPos;

    property Text: string read getText;
    
  end;

  TArrayUserVar = array of TUserVar;
  
  TUserVarList = class
  private
    FUserVarList: TArrayUserVar;
    FCount: integer;

    procedure CheckArray;
    function getText: string;

  public
    constructor Create;
    destructor Destroy; override;
    procedure Clear;

    function AddVar(aName: string): TUserVar; overload;
    function AddVar(aID: integer; aName: string; aValue: variant; aDataType: TDataType;
                    aVarType: TVarType; aOffPos: integer): TUserVar; overload;
    procedure AddVar(aUserVar: TUserVar); overload;

    function GetVarByName(aName: string): TUserVar;
    function GetVarByIndex(aIndex: integer): TUserVar;
    function getVarByID(aID: integer): TUserVar;

    procedure DelVarByID(aID: integer);
    procedure DelVarByIndex(aIndex: integer);
    procedure DelLastVar;

    property Count: integer read FCount;
    property Text: string read getText;

  end;      

  TMethodType = (mtProc, mtFun);

  TSysProcMethod = procedure(v: TUserVarList);

  TUserMethod = class
  private
    FID: Integer;
    FName: string;

    FMethodType: TMethodType;  //過程,函數

    FParamList: TList;

    FDynaVarList: TList;

    FCurOffPos: integer;           //當前位移數

    FResultVar: TUserVar;

    FAddr: integer;

    FSysMethodFlag: boolean;
    FSysProcMethod: TSysProcMethod;

    function getText: string;

  public
    constructor Create;

    procedure AddParamVar(aUserVar: TUserVar);
    procedure AddDynaVar(aUserVar: TUserVar);
    procedure AddResultVar(aUserVar: TUserVar);

    procedure Clone(aUserMethod: TUserMethod);

    function GetParamVarByIndex(aIndex: integer): TUserVar;
    function GetDyanVarByIndex(aIndex: integer): TUserVar;

    property ID: integer read FID write FID;
    property Name: string read FName write FName;
    property MethodType: TMethodType read FMethodType write FMethodType;
    property ParamList: TList read FParamList;
    property DynaVarList: TList read FDynaVarList;
    property CurOffPos: integer read FCurOffPos write FCurOffPos;
    property ResultVar: TUserVar read FResultVar;
    property Addr: integer read FAddr write FAddr;
    property Text: string read getText;
    property SysMethodFlag: boolean read FSysMethodFlag write FSysMethodFlag;
    property SysProcMethod: TSysProcMethod read FSysProcMethod write FSysProcMethod;
  end;

  TArrayUserMethod = array of TUserMethod;

  TUserMethodList = class
  private
    FUserMethodList: TArrayUserMethod;
    FCount: integer;

    procedure CheckArray;
    function getMethodByID(aID: integer): TUserMethod;

    function getText: string;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Clear;

    function AddMethod(aName: string): TUserMethod; overload;
    function AddMethod(aID: integer; aName: string; aMethodType: TMethodType;
                       aCurOffPos: integer; aAddr: integer): TUserMethod; overload;
    function AddMethod(aMethod: TUserMethod): TUserMethod; overload;
    function GetMethodByName(aName: string): TUserMethod;

    property UserMethod[aID: integer]: TUserMethod read getMethodByID;
    property Count: integer read FCount;
    property UserMethodList: TArrayUserMethod read FUserMethodList;
    property Text: string read getText;
  end;

  TVMPCode = class        //虛擬機代碼
  private
    FCmd, FP1, FP2, FAddr: integer;

    function getText: string;
  public
    class function getCmdStr(aCmd: integer): string;
    
    property Cmd: integer read FCmd write FCmd;
    property P1: integer read FP1 write FP1;
    property P2: integer read FP2 write FP2;
    property Addr: integer read FAddr;

    property Text: string read getText;
  end;

  TArrayVMPCode = array of TVMPCode;

  TVMPCodeList = class
  private
    FVMPCodeList: TArrayVMPCode;
    FCount: integer;

    procedure CheckArray;
    function getVMPCodeByIndex(aIndex: integer): TVMPCode;
    function getLastVMPCode: TVMPCode;

    function getText: string;

  public
    constructor Create;
    destructor Destroy; override;
    procedure Clear;

    function AddVMPCode(aCmd, aP1, aP2: integer): TVMPCode;

    property VMPCodeList[aIndex: integer]: TVMPCode read getVMPCodeByIndex;
    property Count: integer read FCount;
    property LastVMPCode: TVMPCode read getLastVMPCode;

    property Text: string read getText;
  end;      

  TCodeMaker = class
  private
    FVarList: TList;
    FConstVarList: TList;
    FMethodList: TList;

    FAnalyDepth: integer;

    FParentCodeMaker: TCodeMaker;
    FParentTokenReader: TTokenReader;

  public
    function RegisterVar(aName: string; aAnalyDepth: integer = -1): TUserVar; virtual;
    function RegisterConstVar(aName: string): TUserVar; virtual;
    function FindVarByName(aName: string; var aLevel: integer): TUserVar; virtual;
    function FindVarByID(aID: integer): TUserVar; virtual;

    function RegisterMethod(aName: string; aAnalyDepth: integer = -1): TUserMethod; virtual;
    function FindMethodByName(aName: string; var aLevel: integer): TUserMethod; virtual;

    function PutCode(aCmd, aP1, aP2: integer): TVMPCode; virtual;

    function GetLastVMPCode: TVMPCode; virtual;
    function GetAnalyDepth: integer; virtual;

  public
    constructor Create(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); virtual; 
    destructor Destroy; override;

    property LastVMPCode: TVMPCode read GetLastVMPCode;
    property AnalyDepth: integer read GetAnalyDepth;
    property VarList: TList read FVarList;
    property ConstVarList: TList read FConstVarList;
    property MethodList: TList read FMethodList;
  end;  

  TStack = class
  private
    FDatas: array of variant;
    FCount: integer;

  public
    constructor Create;
    destructor Destroy; override;

    procedure Put(v: Variant);
    function Pop: variant;
    function getData(aIndex: integer): variant;

    procedure Clear;
  end;   




  TCallInfo = class
  private
    FBaseDynaVarAddr: integer;
    FVarCount: integer;
    FCallAddr: integer;
    FMethod: TUserMethod;

  public
    property BaseDynaVarAddr: integer read FBaseDynaVarAddr;
    property VarCount: integer read FVarCount;
    property CallAddr: integer read FCallAddr;
    property Method: TUserMethod read FMethod;
  end;

  TArrayCallInfo = array of TCallInfo;

  TCallStack = class
  private
    FCallInfoList: TArrayCallInfo;
    FCount: integer;  

    procedure CheckArray;
    function getLastCallInfo: TCallInfo;

  public
    constructor Create;
    destructor Destroy; override;

    function PutMethodCall(aMethod: TUserMethod; aCallAddr: integer): TCallInfo;
    procedure RemoveLastCall;

    function GetPreCallInfo(aOffPos: integer): TCallInfo;
    procedure Clear;

    property LastCallInfo: TCallInfo read getLastCallInfo;
    property Count: integer read FCount;
  end;
    
  TDynaVarStack = class

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产欧美一区二区| 91首页免费视频| 成人午夜av在线| 在线播放亚洲一区| 国产精品视频免费| 国产一区二区三区四区五区入口 | 91在线视频免费91| 日韩欧美不卡在线观看视频| 国产精品久久久99| 国产在线精品不卡| 日韩欧美国产综合在线一区二区三区| 亚洲视频免费在线| 国产盗摄一区二区| 日韩免费看网站| 午夜精品福利久久久| 99久久国产综合精品女不卡| 国产亚洲一区字幕| 美女视频第一区二区三区免费观看网站 | 男男成人高潮片免费网站| 91亚洲精品一区二区乱码| 久久久精品欧美丰满| 蜜桃av一区二区| 91精品国产91热久久久做人人| 亚洲日本一区二区| 99视频精品在线| 国产精品国产三级国产| 国产精品一区二区黑丝| 久久99国内精品| 婷婷中文字幕综合| 中文久久乱码一区二区| 69堂精品视频| 91碰在线视频| 欧洲国内综合视频| 成人高清视频在线观看| 蜜臀av一级做a爰片久久| 亚洲欧美一区二区三区极速播放 | 全国精品久久少妇| av一区二区三区四区| 国产午夜亚洲精品午夜鲁丝片| 激情文学综合丁香| 欧美精品一区二区久久婷婷 | 成人免费av网站| 亚洲国产岛国毛片在线| 成熟亚洲日本毛茸茸凸凹| 中文字幕精品一区二区三区精品 | 中文幕一区二区三区久久蜜桃| 国产成人午夜精品5599| 国产精品毛片a∨一区二区三区| 成人激情免费电影网址| 亚洲手机成人高清视频| 色婷婷激情综合| 丝袜亚洲精品中文字幕一区| 日韩亚洲欧美一区| 国产麻豆精品视频| 国产精品嫩草影院com| 日本久久电影网| 日本91福利区| 中文字幕不卡在线| 色8久久精品久久久久久蜜| 午夜不卡在线视频| 国产欧美一区二区精品性色超碰 | 亚洲欧洲99久久| 在线精品视频免费观看| 日本午夜一本久久久综合| 2019国产精品| 色综合久久66| 久久国产精品99久久久久久老狼| 中文一区在线播放| 欧美视频中文一区二区三区在线观看 | 欧美视频一二三区| 亚洲天堂免费看| 蜜桃精品在线观看| 色悠悠久久综合| 2023国产精华国产精品| 亚洲电影视频在线| 一本久道久久综合中文字幕| 日韩精品一区二区三区老鸭窝 | 91美女片黄在线观看| 国产精品理论在线观看| 久久综合色播五月| 91久久奴性调教| 国产一区二区三区高清播放| 亚洲综合久久av| 中文字幕免费观看一区| 6080日韩午夜伦伦午夜伦| 99久久99久久综合| 国产一区二区精品久久91| 午夜精品一区在线观看| 国产精品福利一区| 久久伊人蜜桃av一区二区| 欧美日产在线观看| 色香蕉久久蜜桃| 成人久久视频在线观看| 久久超级碰视频| 日韩专区在线视频| 亚洲午夜精品在线| 亚洲色图欧美激情| 国产精品久久久久一区| 久久综合成人精品亚洲另类欧美 | 欧美老肥妇做.爰bbww视频| 成人app在线| 国精产品一区一区三区mba桃花 | 99re成人在线| 成人免费观看av| 国产一区二区三区久久悠悠色av| 亚洲444eee在线观看| 综合激情成人伊人| 国产精品欧美极品| 欧美激情在线一区二区三区| 精品国产乱码久久久久久免费| 4438x亚洲最大成人网| 欧美色图在线观看| 在线看日本不卡| 日本道色综合久久| 在线亚洲一区二区| 色激情天天射综合网| 91麻豆精品视频| 欧美性受xxxx| 免费一级片91| 午夜欧美在线一二页| 免费不卡在线视频| 亚洲自拍偷拍图区| 国产精品久久久久久户外露出| 日韩一区二区精品在线观看| 成人晚上爱看视频| 六月丁香综合在线视频| 天堂成人免费av电影一区| 成人免费一区二区三区视频| 久久婷婷综合激情| 国产精品无遮挡| 久久久久久久久久电影| 国产成人精品免费在线| 国产乱码精品1区2区3区| 成人在线视频一区| 色综合欧美在线| 91精品国产91久久久久久最新毛片| 91精品国产高清一区二区三区蜜臀| 欧美成人在线直播| 国产精品你懂的| 亚洲一区二区3| 久久99久久99| 91在线小视频| 欧美一级专区免费大片| 亚洲精品在线网站| 国产精品国产三级国产普通话三级| 亚洲一区二区三区激情| 美女高潮久久久| 99精品国产91久久久久久| 欧美三级视频在线观看| 久久一区二区三区国产精品| 国产精品色哟哟| 日韩福利电影在线观看| 国产91露脸合集magnet| 欧美三级欧美一级| 日本一区二区在线不卡| 亚洲国产日产av| 国产成人鲁色资源国产91色综| 91成人免费在线| 久久久久久久av麻豆果冻| 亚洲精品视频观看| 99久久夜色精品国产网站| 日韩一区二区三区在线视频| 国产精品久久久久三级| 日韩电影免费一区| 91一区一区三区| 久久蜜臀中文字幕| 午夜精品福利一区二区三区av| 成人在线综合网站| 欧美电影免费观看高清完整版在线| 亚洲人吸女人奶水| 黑人巨大精品欧美一区| 精品视频在线视频| 国产精品成人免费精品自在线观看 | 欧美日韩中字一区| 国产精品久久久一区麻豆最新章节| 视频一区视频二区中文| 91麻豆国产精品久久| 久久亚洲综合色一区二区三区| 亚洲国产精品麻豆| 97久久精品人人爽人人爽蜜臀| 久久亚洲一区二区三区明星换脸| 亚洲国产cao| 欧美网站一区二区| 亚洲欧美另类小说| 成人免费毛片aaaaa**| 2023国产精品| 黄色精品一二区| 精品国产伦一区二区三区免费| 午夜精品在线看| 欧美日高清视频| 香蕉成人啪国产精品视频综合网| 91美女视频网站| 最新国产の精品合集bt伙计| 成人性生交大片免费看视频在线 | 国产一区二区网址| 精品人在线二区三区| 蜜乳av一区二区三区| 日韩欧美国产综合一区| 久88久久88久久久| www激情久久|