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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? untpasscriptcompile.pas

?? 運(yùn)用delphi編寫的小型解釋器
?? PAS
?? 第 1 頁 / 共 5 頁
字號(hào):
    SetLength(FUserMethodList, FCount + 30);
    end;
end;

procedure TUserMethodList.Clear;
var
  i: integer;
begin
  for i := 0 to FCount - 1 do
    begin
    FreeAndNil(FUserMethodList[i]);
    end;

  SetLength(FUserMethodList, 30);

  FCount := 0;

end;

constructor TUserMethodList.Create;
begin
  SetLength(FUserMethodList, 30);
  FCount := 0;
end;

destructor TUserMethodList.Destroy;
var
  i: integer;
begin
  for i := 0 to FCount - 1 do
    begin
    FreeAndNil(FUserMethodList[i]);
    end;

  SetLength(FUserMethodList, 0);
  
  inherited;
end;

function TUserMethodList.getMethodByID(aID: integer): TUserMethod;
var
  i: integer;
begin
  for i := 0 to FCount - 1 do
    begin
    if FUserMethodList[i].ID = aID then
        begin
        Result := FUserMethodList[i];
        exit;
        end;
    end;

  raise Exception.Create('沒該ID的方法!');
end;

function TUserMethodList.GetMethodByName(aName: string): TUserMethod;
var
  i: integer;
begin
  for i := 0 to FCount - 1 do
    begin
    if SameText(FUserMethodList[i].Name, aName) then
      begin
      Result := FUserMethodList[i];
      exit;
      end;
    end;

  Result := nil;
end;


function TUserMethodList.getText: string;
var
  i: integer;
begin
  Result := '';

  for i := 0 to FCount - 1 do
    begin
    Result := UserMethod[i].Text + #13#10;
    end;

end;

{ TVMPCodeList }

function TVMPCodeList.AddVMPCode(aCmd, aP1, aP2: integer): TVMPCode;
begin
  CheckArray;

  FVMPCodeList[FCount] := TVMPCode.Create;
  FVMPCodeList[FCount].Cmd := aCmd;
  FVMPCodeList[FCount].P1 := aP1;
  FVMPCodeList[FCount].P2 := aP2;
  FVMPCodeList[FCount].FAddr := FCount;

  Result := FVMPCodeList[FCount];

  Inc(FCount);
end;

procedure TVMPCodeList.CheckArray;
begin
  if FCount >= Length(FVMPCodeList) then
    begin
    SetLength(FVMPCodeList, FCount + 30);
    end;
end;

procedure TVMPCodeList.Clear;
var
  i: integer;
begin
  for i := 0 to FCount - 1 do
    begin
    FreeAndNil(FVMPCodeList[i]);
    end;

  SetLength(FVMPCodeList, 30);

  FCount := 0;

end;

constructor TVMPCodeList.Create;
begin
  FCount := 0;
  SetLength(FVMPCodeList, 30);
end;

destructor TVMPCodeList.Destroy;
var
  i: integer;
begin
  for i := 0 to FCount - 1 do
    begin
    FreeAndNil(FVMPCodeList[i]);
    end;

  SetLength(FVMPCodeList, 0);
  
  inherited;
end;

function TVMPCodeList.getLastVMPCode: TVMPCode;
begin
  Result := FVMPCodeList[FCount - 1];
end;

function TVMPCodeList.getText: string;
var
  i: integer;
begin
  Result := '';

  for i := 0 to FCount - 1 do
    begin
    Result := Result + FVMPCodeList[i].getText + #13#10; 
    end;

end;

function TVMPCodeList.getVMPCodeByIndex(aIndex: integer): TVMPCode;
begin
  if (aIndex < 0) or (aIndex >= FCount) then raise Exception.Create('索引超出范圍!');

  Result := FVMPCodeList[aIndex];
end;


{ TAnalyExpression }

procedure TAnalyExpression.Analy;
begin
  Expression;
end;

class procedure TAnalyExpression.Analy(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader);
var
  analy: TAnalyExpression;
begin
  analy := TAnalyExpression.Create(aCodeMaker, aTokenReader);
try
  analy.Analy;

  finally
  FreeAndNil(analy);
  end;
end;

constructor TAnalyExpression.Create(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader);
begin
  FCodeMaker := aCodeMaker;
  FTokenReader := aTokenReader;
end;

destructor TAnalyExpression.Destroy;
begin
  FCodeMaker := nil;
  FTokenReader := nil;
  
  inherited;
end;

procedure TAnalyExpression.Expression;
var
  tmp: TToken;
begin
  tmp := FTokenReader.NextToken;

  if tmp.ID = rcidMinus then
      begin
      FTokenReader.ReadToken;
      Term;
      FCodeMaker.PutCode(ocNeg, 0, 0);
      end
     else Term;

  tmp := FTokenReader.NextToken;
  
  while (tmp.ID = rcidPlus) or (tmp.ID = rcidMinus) or (tmp.ID = rwidOr) or (tmp.ID = rwidXor) do
    begin
    FTokenReader.ReadToken;
    
    Case tmp.ID of
        rcidPlus: begin
                  Term;
                  FCodeMaker.PutCode(ocAdd, 0, 0);
                  end;

        rcidMinus: begin
                 Term;
                 FCodeMaker.PutCode(ocSub, 0, 0);
                 end;

        rwidOr: begin
              Term;
              FCodeMaker.PutCode(ocOr, 0, 0);
              end;

        rwidXor: begin
               Term;
               FCodeMaker.PutCode(ocXor, 0, 0);
               end;
    end;

    tmp := FTokenReader.NextToken;
  end;

end;

procedure TAnalyExpression.Factor;
var
  str: string;
  aUserVar: TUserVar;
  aLevel: integer;
  method: TUserMethod;
  tmp: TToken;
begin
  tmp := FTokenReader.NextToken;

  case tmp.ID of
      udIdentifier: begin
                    str := tmp.data;

                    method := FCodeMaker.FindMethodByName(str, aLevel);
                    if method <> nil then
                       begin
                       TAnalyCallMethod.Analy(FCodeMaker, FTokenReader);
                       end
                      else begin
                           FTokenReader.ReadToken;
                           str := tmp.data;

                           aUserVar := FCodeMaker.FindVarByName(str, aLevel);
                           if aUserVar = nil then FTokenReader.Error('變量' + str + '沒有定義');
                           FCodeMaker.PutCode(ocMov, aLevel, aUserVar.ID);
                           end;



                    end;

      rwidFalse: begin
                 FTokenReader.ReadToken;

                 aUserVar := FCodeMaker.RegisterConstVar('False');
                 aUserVar.Value := False;
                 aUserVar.VarType := vtStatic;
                 aUserVar.DataType := dtBool;

                 FCodeMaker.PutCode(ocLoadConst, 0, aUserVar.ID);
                 end;

      rwidTrue: begin
                FTokenReader.ReadToken;

                aUserVar := FCodeMaker.RegisterConstVar('True');
                aUserVar.Value := True;
                aUserVar.VarType := vtStatic;
                aUserVar.DataType := dtBool;

                FCodeMaker.PutCode(ocLoadConst, 0, aUserVar.ID);  
                end;

      rwidNil: begin
               FTokenReader.ReadToken;

               aUserVar := FCodeMaker.RegisterConstVar('Nil');
               aUserVar.Value := null;
               aUserVar.VarType := vtStatic;
               aUserVar.DataType := dtOther;

               FCodeMaker.PutCode(ocLoadConst, 0, aUserVar.ID);
               end;

      rwidNull: begin
                FTokenReader.ReadToken;

                aUserVar := FCodeMaker.RegisterConstVar('Null');
                aUserVar.Value := null;
                aUserVar.VarType := vtStatic;
                aUserVar.DataType := dtOther;

                FCodeMaker.PutCode(ocLoadConst, 0, aUserVar.ID);
                end;


      udNumberConst: begin
                     FTokenReader.ReadToken;

                     aUserVar := FCodeMaker.RegisterConstVar('Number');
                     aUserVar.Value := FTokenReader.CurToken.Data;
                     aUserVar.VarType := vtStatic;
                     aUserVar.DataType := dtFloat;

                     FCodeMaker.PutCode(ocLoadConst, 0, aUserVar.ID);
                     end;

      udStringConst: begin
                     FTokenReader.ReadToken;

                     aUserVar := FCodeMaker.RegisterConstVar('String');
                     aUserVar.Value := FTokenReader.CurToken.Data;
                     aUserVar.VarType := vtStatic;
                     aUserVar.DataType := dtStr;

                     FCodeMaker.PutCode(ocLoadConst, 0, aUserVar.ID);
                     end;

      rcidOpenBracket: begin
                       FTokenReader.ReadToken;
                       
                       Expression;
                       FTokenReader.getCloseBracket;
                       end;

  end;

end;

procedure TAnalyExpression.Term;
var
  tmp: TToken;
begin
  Factor;

  tmp := FTokenReader.NextToken;

  while (tmp.ID = rwidAnd) or (tmp.ID = rcidStar) or (tmp.ID = rcidSlash) or
        (tmp.ID = rwidDiv) or (tmp.ID = rwidMod) do
        begin
        Case tmp.ID of
          rwidAnd: begin
                   FTokenReader.ReadToken;
                   Factor;
                   FCodeMaker.PutCode(ocAnd, 0, 0);
                   end;

          rcidStar: begin
                    FTokenReader.ReadToken;
                    Factor;
                    FCodeMaker.PutCode(ocMul, 0, 0);
                    end;

          rcidSlash: begin
                     FTokenReader.ReadToken;
                     Factor;
                     FCodeMaker.PutCode(ocDiv, 0, 0);
                     end;

          rwidMod: begin
                   FTokenReader.ReadToken;
                   Factor;
                   FCodeMaker.PutCode(ocMod, 0, 0);
                   end;
          end;

        tmp := FTokenReader.NextToken;

        end;

end;

{ TAnalyStatement }

procedure TAnalyStatement.Analy;
begin
  Statement;
end;

class procedure TAnalyStatement.Analy(aCodeMaker: TCodeMaker;
  aTokenReader: TTokenReader);
var
  aAnaly: TAnalyStatement;
begin
  aAnaly := TAnalyStatement.Create(aCodeMaker, aTokenReader);
try
  aAnaly.Analy;

  finally
  FreeAndNil(aAnaly);
  end;
end;

constructor TAnalyStatement.Create(aCodeMaker: TCodeMaker; aTokenReader: TTokenReader);
begin
  FCodeMaker := aCodeMaker;
  FTokenReader := aTokenReader;
end;

destructor TAnalyStatement.Destroy;
begin
  FCodeMaker := nil;
  FTokenReader := nil;
  
  inherited;
end;

procedure TAnalyStatement.Statement;
var
  tmp: TToken;
  c1, c2, c3, lastcode: TVMPCode;
  aCondition: TAnalyCondition;
  aExpression: TAnalyExpression;
  aUserVar: TUserVar;
  aLevel: integer;
begin
  aCondition := TAnalyCondition.Create(FCodeMaker, FTokenReader);
  aExpression := TAnalyExpression.Create(FCodeMaker, FTokenReader);
try
  
  tmp := FTokenReader.NextToken;

  Case tmp.ID of
    rwidBegin: begin
               FTokenReader.ReadToken;

               Statement;
             
               while FTokenReader.NextToken.ID = rcidDelimeter do
                 begin
                 FTokenReader.ReadToken;
                 Statement;
                 end;

               FTokenReader.ReadToken;
             
               if FTokenReader.CurToken.ID <> rwidEnd then FTokenReader.Error('期望end!');
               end;

    rwidIf: begin
            FTokenReader.ReadToken;

            aCondition.Analy;

            c1 := FCodeMaker.PutCode(ocIfFalseGoto, 0, 0);

            FTokenReader.ReadToken;

            if FTokenReader.CurToken.ID <> rwidThen then FTokenReader.Error('期望then!');

            Statement;

            c1.P2 := FCodeMaker.LastVMPCode.Addr + 1;

            if FTokenReader.NextToken.ID = rcidDelimeter then exit;

            if FTokenReader.NextToken.ID <> rwidElse then FTokenReader.Error('期望else!');

            FTokenReader.ReadToken;

            c2 := FCodeMaker.PutCode(ocGoto, 0, 0);

            c1.P2 := c2.Addr + 1;

            Statement;

            c2.P2 := FCodeMaker.LastVMPCode.Addr + 1;
            end;

    rwidWhile: begin
               FTokenReader.ReadToken;

               lastcode := FCodeMaker.LastVMPCode;

               aCondition.Analy;

               c1 := FCodeMaker.PutCode(ocIfFalseGoto, 0, 0);

          

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品日产精品乱码不卡| 亚洲一区二区三区四区的| 一区免费观看视频| 日韩电影免费在线看| 97久久精品人人澡人人爽| 精品国产乱码久久| 午夜视频一区二区| 91蜜桃在线免费视频| 久久久久久久久久久久久女国产乱| 亚洲精品国产第一综合99久久| 韩国三级中文字幕hd久久精品| 欧美老年两性高潮| 亚洲欧美福利一区二区| 高清不卡一二三区| 精品91自产拍在线观看一区| 午夜激情综合网| 欧美性欧美巨大黑白大战| **性色生活片久久毛片| 粉嫩一区二区三区在线看| 久久综合色之久久综合| 美女在线观看视频一区二区| 欧美二区乱c少妇| 亚洲国产精品久久艾草纯爱 | 国产日韩欧美精品在线| 蜜桃视频第一区免费观看| 91精品一区二区三区在线观看| 国产精品国产三级国产aⅴ中文 | 国产精品日韩精品欧美在线| 九九久久精品视频| 欧美一区2区视频在线观看| 午夜欧美一区二区三区在线播放| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 精品国产青草久久久久福利| 日韩av二区在线播放| 欧美一级搡bbbb搡bbbb| 美国毛片一区二区| 欧美成人官网二区| 国产精品一二一区| 国产人成一区二区三区影院| 国产91精品一区二区麻豆网站| 色天天综合色天天久久| 亚洲一线二线三线视频| 日本高清免费不卡视频| 亚洲欧洲日韩女同| 国产成人综合自拍| 日韩欧美亚洲另类制服综合在线| 污片在线观看一区二区| 欧美日韩一级视频| 亚洲国产精品久久人人爱| 在线免费亚洲电影| 亚洲欧美区自拍先锋| 色妹子一区二区| 国产日产精品一区| 成人小视频在线| 综合自拍亚洲综合图不卡区| 91免费观看在线| 亚洲一区免费观看| 欧美日韩亚州综合| 日韩精品久久理论片| 欧美狂野另类xxxxoooo| 免费在线视频一区| 日韩一区二区不卡| 成人三级伦理片| 亚洲精品国产品国语在线app| 欧美性猛交xxxxxx富婆| 午夜精品在线视频一区| 欧美成人精品高清在线播放| 国产精品一区二区三区网站| 国产精品乱码妇女bbbb| 粉嫩av一区二区三区粉嫩| 国产精品三级电影| 欧美亚洲高清一区| 蜜臀av一区二区三区| 日韩欧美第一区| 成人av网在线| 亚洲国产视频在线| 精品久久人人做人人爰| 成人黄色小视频| 国产精品乱码一区二区三区软件| 91精品国产综合久久小美女| 91精品国产综合久久福利 | 国产v日产∨综合v精品视频| 亚洲国产精品精华液ab| 在线精品亚洲一区二区不卡| 爽好多水快深点欧美视频| 欧美不卡在线视频| jizzjizzjizz欧美| 天天影视涩香欲综合网| 久久久99久久| 91亚洲国产成人精品一区二区三| 国产欧美日韩精品在线| 一本一道波多野结衣一区二区| 亚洲国产欧美日韩另类综合| 精品日韩99亚洲| 欧美色偷偷大香| 日韩电影在线观看电影| 国产精品美女一区二区三区| 欧洲视频一区二区| 亚洲六月丁香色婷婷综合久久 | 99riav久久精品riav| 一区二区在线观看免费视频播放| 4438亚洲最大| 99综合影院在线| 狠狠久久亚洲欧美| 午夜电影久久久| ...av二区三区久久精品| 欧美va亚洲va| 欧美日韩综合在线| 东方欧美亚洲色图在线| 偷拍自拍另类欧美| 一区二区欧美精品| 国产精品久久久久桃色tv| 欧美一级专区免费大片| 色999日韩国产欧美一区二区| 国产精品538一区二区在线| 日韩国产欧美三级| 亚洲精品乱码久久久久久| 日韩欧美电影在线| 精品久久久久久久久久久久久久久久久 | 成人精品鲁一区一区二区| 久久99精品久久久久久久久久久久| 亚洲制服丝袜av| 亚洲精品日韩一| 国产目拍亚洲精品99久久精品| www一区二区| 精品日韩在线观看| 精品日韩一区二区三区| 欧美一级二级三级蜜桃| 91在线看国产| 国产成人综合网站| 成人av在线资源网| 成人动漫精品一区二区| 成+人+亚洲+综合天堂| 丁香婷婷深情五月亚洲| 国产·精品毛片| 不卡影院免费观看| 成人一级片在线观看| 欧美综合欧美视频| 欧美日韩免费观看一区三区| 欧美性视频一区二区三区| 欧美日韩亚洲另类| 91精品国产综合久久香蕉麻豆| 欧美一级专区免费大片| 2021中文字幕一区亚洲| 国产亚洲精品aa午夜观看| 国产欧美精品一区| 亚洲丝袜美腿综合| 亚洲主播在线观看| 亚洲一区精品在线| 国产美女一区二区三区| 99综合影院在线| 欧美日韩高清一区二区三区| 国产欧美日韩视频在线观看| 一区二区三区在线观看欧美| 日本亚洲一区二区| 成人av在线播放网站| 欧美性感一区二区三区| 久久久久久久久久久久电影| 一区二区三区免费看视频| 老司机一区二区| 成人综合婷婷国产精品久久免费| 欧美男男青年gay1069videost | 欧美亚日韩国产aⅴ精品中极品| 日韩精品中文字幕在线一区| 国产欧美一区二区三区在线老狼| 爽好久久久欧美精品| 国产精品一二三区| 日韩一区国产二区欧美三区| 国产精品蜜臀在线观看| 精品亚洲成a人| 日本乱人伦aⅴ精品| 日韩精品中文字幕在线不卡尤物 | 精品福利一区二区三区免费视频| 久久精品男人的天堂| 亚洲一级电影视频| 成人av在线观| 精品久久久久久亚洲综合网| 亚洲成人综合网站| 成人免费不卡视频| 欧美精品第1页| 亚洲最新视频在线观看| 国产综合色产在线精品| 欧美日本一区二区三区四区| 国产精品色呦呦| 久久99久久久久| 欧美三级韩国三级日本一级| 久久日一线二线三线suv| 亚洲va韩国va欧美va精品| 99久久免费视频.com| 欧美大片日本大片免费观看| 亚洲精品videosex极品| 国产精品99久久久久久久女警 | 欧美性欧美巨大黑白大战| 久久久久久亚洲综合影院红桃| 亚洲国产sm捆绑调教视频 | 欧美三日本三级三级在线播放| 国产嫩草影院久久久久| 国产91丝袜在线播放| 精品国产一区二区三区四区四| 日本一不卡视频|