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

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

?? untpasscriptcompile.pas

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

  public
    constructor Create;
    destructor Destroy; override;

    procedure LoadMethodVar(aMethod: TUserMethod);
    procedure UnLoadVar(aVarNum: integer);
    procedure Clear;
    function getTopValue: variant;

    function GetVarByPos(aPos: integer): TUserVar;
  end;

  TAnalyProgram = class;

  TVMCPU = class
  private
    FVarList: TUserVarList;
    FConstVarList: TUserVarList;
    FMethodList: TUserMethodList;

    FDynaVarStack: TDynaVarStack;
    FCallStack: TCallStack;
    FStack: TStack;

    FVMPCodeList: TVMPCodeList;

    function GetVarList: TUserVarList;
    function GetConstVarList: TUserVarList;
    function GetMethodList: TUserMethodList;

    function GetVMPCodeList: TVMPCodeList;
    procedure Clear;

  public
    constructor Create(aProgram: TAnalyProgram);
    destructor Destroy; override;  

    procedure Run;

    property VarList: TUserVarList read GetVarList;
    property ConstVarList: TUserVarList read GetConstVarList;
    property MethodList: TUserMethodList read GetMethodList;
    property VMPCodeList: TVMPCodeList read GetVMPCodeList; 

  end;

 
  TAnalyDeclare = class
  private
    FCodeMaker: TCodeMaker;
    FTokenReader: TTokenReader;

    procedure Variables;
    procedure Methods;
  public
    constructor Create(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader);
    destructor Destroy; override;
    procedure Analy; overload;

    class procedure Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); overload;
  end;

  TAnalyExpression = class
  private
    FCodeMaker: TCodeMaker;
    FTokenReader: TTokenReader;

    procedure Expression;
    procedure Term;
    procedure Factor;

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

    procedure Analy; overload;

    class procedure Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); overload;
  end;

  TAnalyCondition = class
  private
    FCodeMaker: TCodeMaker;
    FTokenReader: TTokenReader;

    procedure Condition;
    
  public
    constructor Create(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader);
    destructor Destroy; override;
    
    procedure Analy;  
  end;

  TAnalyStatement = class
  private
    FCodeMaker: TCodeMaker;
    FTokenReader: TTokenReader;

    procedure Statement;

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

    procedure Analy; overload;

    class procedure Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); overload;
  end;

  TAnalyCallMethod = class
  private
    FCodeMaker: TCodeMaker;
    FTokenReader: TTokenReader;

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

    procedure Analy; overload;
    class procedure Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); overload;
  end;

  TAnalyUnit = class(TCodeMaker)
  public
    constructor Create(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); override;
    destructor Destroy; override;

    procedure Analy; overload;

    procedure AddSysMethod;

    class procedure Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); overload;
  end;


  TAnalyMethod = class(TCodeMaker)
  private
    FThisMethod: TUserMethod;

    function AddResultVar: TUserVar;

    procedure ProcDef;
    procedure ProcParam;
    procedure ProcBody;

  public
    function RegisterParamVar(aName: string): TUserVar;
    function RegisterVar(aName: string; aAnalyDepth: integer = -1): TUserVar; override;

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

    procedure Analy; overload;

    class procedure Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader); overload;

  end;

  TAnalySysMethod = class(TCodeMaker)
  private
    FCustomTokenReader: TTokenReader;
    FSysMethod: TSysProcMethod;

  public
    constructor Create(aCodeMaker: TCodeMaker; aProcDef: string; aSysMethod: TSysProcMethod);  reintroduce;  
    destructor Destroy; override;

    procedure Analy; overload;

    class procedure Analy(aCodeMaker: TCodeMaker; aProcDef: string; aSysMethod: TSysProcMethod); overload;
  end;


  TAnalyProgram = class(TCodeMaker)
  private
    FTokenReader: TTokenReader;

    FVMPCodeList: TVMPCodeList;

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

  public
    function GetVMPCodeList: TVMPCodeList;
    function GetLastVMPCode: TVMPCode; override;
    function PutCode(aCmd, aP1, aP2: integer): TVMPCode; override;
      
    constructor Create; reintroduce; overload;
    destructor Destroy; override;

    function Analy: TVMCPU; overload;

    class function Analy(aCode: string): TVMCPU; overload;

    property SourceCode: string read GetSourceCode write SetSourceCode;
  end;


  function getDataType(astr: string): TDataType;
  procedure myShowMessage(v: TUserVarList);


implementation

function getDataType(astr: string): TDataType;
begin
  Result := dtUnknown;
end;


{ TTokenReader }

procedure TTokenReader.BackByte(aNum: integer);
begin
  if FCurPos - aNum > 0 then FCurPos := FCurPos - aNum
    else FCurPos := 1;
end;

constructor TTokenReader.Create;
begin
  FCurPos := 1;
  FSourceLen := 0;
  FSourceCode := '';

  FResWords := TStringList.Create;
  FResWords.AddObject('program', TObject(rwidProgram));
  FResWords.AddObject('label', TObject(rwidLabel));
  FResWords.AddObject('goto', TObject(rwidGoto));
  FResWords.AddObject('var', TObject(rwidVar));
  FResWords.AddObject('begin', TObject(rwidBegin));
  FResWords.AddObject('end', TObject(rwidEnd));
  FResWords.AddObject('and', TObject(rwidAnd));
  FResWords.AddObject('or', TObject(rwidOr));
  FResWords.AddObject('xor', TObject(rwidXor));
  FResWords.AddObject('not', TObject(rwidNot));
  FResWords.AddObject('shl', TObject(rwidShl));
  FResWords.AddObject('shr', TObject(rwidShr));
  FResWords.AddObject('div', TObject(rwidDiv));
  FResWords.AddObject('mod', TObject(rwidMod));
  FResWords.AddObject('true', TObject(rwidTrue));
  FResWords.AddObject('false', TObject(rwidFalse));
  FResWords.AddObject('if', TObject(rwidIf));
  FResWords.AddObject('then', TObject(rwidThen));
  FResWords.AddObject('else', TObject(rwidElse));
  FResWords.AddObject('while', TObject(rwidWhile));
  FResWords.AddObject('repeat', TObject(rwidRepeat));
  FResWords.AddObject('until', TObject(rwidUntil));
  FResWords.AddObject('for', TObject(rwidFor));
  FResWords.AddObject('to', TObject(rwidTo));
  FResWords.AddObject('downto', TObject(rwidDownto));
  FResWords.AddObject('do', TObject(rwidDo));
  FResWords.AddObject('nil', TObject(rwidNil));
  FResWords.AddObject('null', TObject(rwidNull));
  FResWords.AddObject('Unitinit', TObject(rwidUnitinit));
  FResWords.AddObject('Unitfinal', TObject(rwidUnitfinal));
  FResWords.AddObject('class', TObject(rwidClass));
  FResWords.AddObject('type', TObject(rwidType));
  FResWords.AddObject('constr', TObject(rwidConstr));
  FResWords.AddObject('destr', TObject(rwidDestr));
  FResWords.AddObject('uses', TObject(rwidUses));
  FResWords.AddObject('unit', TObject(rwidUnit));
  FResWords.AddObject('interface', TObject(rwidInterface));
  FResWords.AddObject('implement', TObject(rwidImplement));
  FResWords.AddObject('procedure', TObject(rwidProcedure));
  FResWords.AddObject('private', TObject(rwidPrivate));
  FResWords.AddObject('public', TObject(rwidPublic));
  FResWords.AddObject('protected', TObject(rwidProtected));
  FResWords.AddObject('published', TObject(rwidPublished));
  FResWords.AddObject('function', TObject(rwidFunction));
  FResWords.AddObject('const', TObject(rwidConst));
  FResWords.AddObject('property', TObject(rwidProperty));
  FResWords.AddObject('virtual', TObject(rwidVirtual));
  FResWords.AddObject('override', TObject(rwidOverride));
  FResWords.AddObject('dynamic', TObject(rwidDynamic));
  FResWords.AddObject('record', TObject(rwidRecord));
  FResWords.AddObject('forward', TObject(rwidForward));
  FResWords.AddObject('index', TObject(rwidIndex));
  FResWords.AddObject('read', TObject(rwidRead));
  FResWords.AddObject('write', TObject(rwidWrite));
  FResWords.AddObject('stored', TObject(rwidStored));
  FResWords.AddObject('default', TObject(rwidDefault));
  FResWords.AddObject('abstract', TObject(rwidAbstract));
  FResWords.AddObject('stdcall', TObject(rwidStdcall));

end;

destructor TTokenReader.Destroy;
begin
  FreeAndNil(FResWords);
  
  inherited;
end;

procedure TTokenReader.Error(astr: string);
begin
  raise Exception.Create(astr);
end;

procedure TTokenReader.FilterBalckChar;
var
  aByte: byte;
begin
  aByte := NextByte;
  
  if char(aByte) in BlackSpaces then
      begin
      while char(aByte) in BlackSpaces do aByte := ReadByte;
      
      BackByte(1);
      end;
end;

procedure TTokenReader.FilterBlackAndNote;
var
  aPrePos: integer;
begin
  repeat
    aPrePos := FCurPos;
    
    FilterBalckChar;
    FilterNote;
    
  until aPrePos = FCurPos;
end;

procedure TTokenReader.FilterNote;
var
  aByte: byte;
begin
  { 單行注釋 }
  if (NextByte = rcidSlash) and (Next2Byte = rcidSlash) then
      begin
      ReadByte;
      ReadByte;

      aByte := ReadByte;
      while (aByte <> rcidEndOfFile) and (aByte <> rcidEndOfLine) do
          begin
          aByte := ReadByte;
          end;

      ReadByte;
      end;

  { 括弧加星號注釋 }
  if (NextByte = rcidOpenBracket) and (Next2Byte = rcidStar) then
      begin
      ReadByte;
      ReadByte;

      repeat
        aByte := ReadByte;
        until ((aByte = rcidStar) and (NextByte = rcidCloseBracket)) or (aByte = rcidEndOfFile);

      ReadByte;
      end;

  { 大括弧注釋 } 
  if NextByte = rcidOpenComment then
      begin
      ReadByte;
      aByte := ReadByte;

      while (aByte <> rcidCloseComment) and (aByte <> rcidEndOfFile) do aByte := ReadByte;
      end;

end;

procedure TTokenReader.getCloseBracket;
begin
  ReadToken;
  if FCurToken.id <> rcidCloseBracket then Error('期望右括弧!');
end;

procedure TTokenReader.getComma;
begin
  ReadToken;

  If (FCurToken.ID <> rcidComma) then Error('期望逗號!');
end;

function TTokenReader.GetCurToken: TToken;
begin
  Result := FCurToken;
end;

procedure TTokenReader.getDelimeter;
begin
  ReadToken;

  If (FCurToken.ID <> rcidDelimeter) then Error('期望分號!');
end;

function TTokenReader.getIdentOrReservWord: TToken;
var
  aByte: byte;
  str: string;
  i: integer;
begin
  aByte := NextByte;

  if not (char(aByte) in FirstIdentChar) then Error('無法識別的標識符!');

  ReadByte;

  str := char(aByte);

  aByte := NextByte;

  while (char(aByte) in IdentBackChars) and (not (char(aByte) in StopChars)) do
      begin
      ReadByte;

      str := str + char(aByte);
      
      aByte := NextByte;
      end;


  { 是否是保留字 }
  i := FResWords.IndexOf(str);
  if i >= 0 then
      begin
      Result := SetToken(Integer(FResWords.Objects[i]), str);
      exit;
      end;


  { 是用戶自定義標識 }     
  Result := SetToken(udIdentifier, str);

end;

function TTokenReader.getNumberConst: TToken;
var
  aByte: byte;
  str: string;
begin
  aByte := NextByte;
  
  if char(aByte) in Digit then
      begin
      ReadByte;
      
      str := char(aByte);

      aByte := NextByte;

      while char(aByte) in Digit do
          begin
          ReadByte;

          str := str + char(aByte);
          
          aByte := NextByte;
          end;

      if (NextByte = rcidPoint) and (char(Next2Byte) in Digit) then
          begin
          ReadByte;
          
          str := str + '.';

          aByte := NextByte;
          while char(aByte) in Digit do
              begin
              ReadByte;

              str := str + char(aByte);

              aByte := NextByte;
              end;
          end;

      Result := SetToken(udNumberConst, str);
      
      try
        Result.Data := StrToFloat(str);
      except
        Error('數字常量[' + str + ']不正確!');
      end;

      end;

end;

function TTokenReader.getReserveChar: TToken;
var
  aByte: byte;
begin
  aByte := NextByte;
  
  if not IsReserveChar(char(aByte)) then Error('不是保留字符!');

  Result := SetToken(aByte, char(aByte));

  ReadByte;   
end;

function TTokenReader.GetSourceCode: string;
begin
  Result := FSourceCode;
end;

function TTokenReader.getStringConst: TToken;
var
  aByte: byte;
  str: string;
begin
  aByte := NextByte;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久99久久精品免费观看| 在线精品国精品国产尤物884a| 久久精品人人做人人爽97| 色婷婷av一区二区三区之一色屋| 国内精品在线播放| 天天综合网 天天综合色| 7777女厕盗摄久久久| 国产日韩欧美不卡| 久久久.com| 国产欧美中文在线| 精品国产一区二区三区av性色| 欧洲av一区二区嗯嗯嗯啊| 99国产精品久久久久久久久久| 国产一区欧美一区| 国产在线国偷精品免费看| 亚洲激情中文1区| 最新中文字幕一区二区三区| 精品久久国产老人久久综合| 欧美一区二区三区四区五区| 欧美日韩国产成人在线免费| 欧美久久久久久久久中文字幕| 97超碰欧美中文字幕| eeuss国产一区二区三区| 粉嫩在线一区二区三区视频| 国产精品自拍av| 国产91对白在线观看九色| 国产精品自在在线| 国产精品2024| av一二三不卡影片| 91在线视频网址| 国产精品自拍av| 91麻豆精东视频| 欧美性受xxxx| 日韩美女一区二区三区四区| 日韩精品一区二区三区三区免费| 欧美一区二区观看视频| 精品福利一区二区三区免费视频| 久久精品亚洲精品国产欧美 | 成人免费黄色在线| 韩国欧美国产一区| 成人午夜电影网站| 在线观看一区不卡| 在线电影欧美成精品| 欧美成人a在线| 中文字幕欧美日韩一区| 亚洲久草在线视频| 视频在线在亚洲| 国产一二精品视频| 色视频一区二区| 欧美精品一区视频| 亚洲在线视频网站| 日本伊人精品一区二区三区观看方式| 国产在线视频一区二区三区| 成人av资源网站| 欧美在线观看视频一区二区| 欧美视频一区二区三区| 久久人人超碰精品| 亚洲aⅴ怡春院| 成人午夜视频福利| 91精选在线观看| 国产精品久久久久国产精品日日| 亚洲成人黄色影院| 成人综合在线观看| 欧美一区二区三区成人| 亚洲手机成人高清视频| 韩国精品在线观看| 91精品国产91热久久久做人人| 国产精品国产三级国产三级人妇| 亚洲国产精品嫩草影院| 麻豆成人免费电影| 欧美影院午夜播放| 亚洲色大成网站www久久九九| 另类专区欧美蜜桃臀第一页| 91九色最新地址| 国产三级一区二区| 秋霞av亚洲一区二区三| 日本二三区不卡| 中文字幕在线观看一区二区| 精品中文字幕一区二区小辣椒| 欧美日韩激情一区| 亚洲黄网站在线观看| 91色porny在线视频| 国产婷婷色一区二区三区四区| 一区二区三区四区五区视频在线观看| 国产一区二区三区不卡在线观看| 欧美精选午夜久久久乱码6080| 一区二区三区四区乱视频| 日本午夜一本久久久综合| 国产福利不卡视频| www一区二区| 国产伦理精品不卡| 欧美精品一区二区三区蜜臀| 精品在线亚洲视频| 精品成人一区二区三区| 久久精品理论片| 欧美成人video| 国产一区二三区好的| 久久久一区二区三区| 国产69精品久久99不卡| 国产色产综合色产在线视频| 成人午夜激情视频| 中文字幕在线不卡视频| 不卡的电视剧免费网站有什么| 久久综合色天天久久综合图片| 精品在线免费视频| 国产精品天美传媒| 91丨九色丨蝌蚪富婆spa| 亚洲最新视频在线观看| 欧美精选一区二区| 韩国av一区二区三区四区| 欧美精品一区二| 成人精品高清在线| 亚洲精品视频在线看| 欧美日韩免费不卡视频一区二区三区| 首页国产欧美日韩丝袜| 欧美男人的天堂一二区| 亚洲成人免费av| 欧美一级二级三级乱码| 国产精品一级片在线观看| 国产精品久久久久久妇女6080| 欧美日韩在线电影| 久久综合综合久久综合| 国产精品日产欧美久久久久| 在线观看视频欧美| 激情欧美一区二区| 一二三四区精品视频| 日韩亚洲欧美综合| 精品中文字幕一区二区小辣椒| 国产精品三级久久久久三级| 欧美日韩国产高清一区二区三区 | 欧美一区2区视频在线观看| 黄色资源网久久资源365| 国产精品三级视频| 日韩一级视频免费观看在线| 成人高清av在线| 奇米色777欧美一区二区| 自拍偷拍国产亚洲| 久久久另类综合| 欧美羞羞免费网站| 激情综合网av| 亚洲成人久久影院| 成人免费在线视频| 精品福利在线导航| 宅男噜噜噜66一区二区66| proumb性欧美在线观看| 国内精品视频一区二区三区八戒| 一区二区三区在线免费播放 | 欧美精品日韩综合在线| 成人激情免费电影网址| 久久精品国产亚洲a| 亚洲一区二区视频| 中文字幕一区二区三中文字幕| 日韩欧美国产精品| 暴力调教一区二区三区| 精品国产乱码久久久久久老虎| 久久97超碰国产精品超碰| 欧美国产日产图区| 亚洲精品一区二区三区影院| 欧美高清dvd| 日韩视频在线你懂得| ww亚洲ww在线观看国产| 国产日韩欧美激情| 亚洲午夜精品久久久久久久久| 亚洲午夜成aⅴ人片| 老司机免费视频一区二区三区| 蜜臀99久久精品久久久久久软件| 久久精品国产精品亚洲综合| 国产a久久麻豆| 欧美在线综合视频| 久久久电影一区二区三区| 亚洲视频图片小说| 久久精品国产99| 欧美午夜免费电影| 亚洲婷婷综合色高清在线| 日韩av在线播放中文字幕| 成人av网站在线观看| 91精品国产欧美一区二区| 中文字幕亚洲不卡| 韩国精品主播一区二区在线观看| 色婷婷综合久久久久中文一区二区| 国产亚洲欧美日韩日本| 秋霞av亚洲一区二区三| 91精品国产入口| 亚洲第一福利一区| 欧美综合一区二区| 亚洲乱码中文字幕| 色综合久久66| 亚洲精品视频在线观看免费| 97se亚洲国产综合在线| 国产精品国产成人国产三级| 韩国女主播一区二区三区| 日韩欧美123| 国产精品正在播放| 久久久99精品免费观看不卡| 亚洲香肠在线观看| 日韩免费一区二区| 国产精品亚洲一区二区三区在线| 日韩欧美高清在线| 国产精品18久久久久久久久| 国产精品久久久久毛片软件|