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

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

?? ztoken.pas

?? 一款由Zlib來的數(shù)學公式解析器
?? PAS
字號:
{******************************************************************
*  (c)copyrights Capella Development Group, Donetsk 1999 - 2000
*  Project: Zeos Library
*  Module: Functions for lexic and syntax process 
*  Author: Sergey Seroukhov   E-Mail: voland@kita.dgtu.donetsk.ua
*  Date: 01/12/98
*
*  List of changes:
*    1.1  Add new functions for param string split
*    1.2  Add new function to SQL queries processinf
*    13/03/00 - Fixed style (Thanks Robert Marquardt)
******************************************************************}

unit ZToken;

interface

uses Classes, SysUtils;

{$INCLUDE Zeos.inc}

const
{ Special symbols }
  tokTAB   = #9;
  tokCR    = #13;
  tokNL    = #10;
  tokDELIM = ' .:;,+-<>/*%^=()[]|&~@#$\`{}'#9#10#13;
  tokSPACE = ' ';

type
{ Lexem types }
  TTokenType = (ttUnknown, ttDelim, ttDigit, ttAlpha, ttString, ttCommand);

{******************* Check types functions ********************}

{ Check if delimiter }
function IsDelim(Value: Char): Boolean;

{ Check if white spaces }
function IsWhite(Value: Char): Boolean;

{ Check if digit }
function IsDigit(Value: Char): Boolean;

{ Check if alpha }
function IsAlpha(Value: Char): Boolean;

{ Check if end of line }
function IsEOL(Value: Char): Boolean;

{****************** Functions for lexical analize *************}

{ Extract lexem }
function ExtractToken(var Buffer, Token: string): TTokenType;

{ Extract high level lexem }
function ExtractTokenEx(var Buffer, Token: string): TTokenType;

{ Extract high high level lexem }
function ExtractHighToken(var Buffer: string; Cmds: TStringList;
  var Token: string; var CmdNo: Integer): TTokenType;

{ Putback lexem to buffer }
procedure PutbackToken(var Buffer: string; Value: string);

{ Delete begin and end quotes }
function DeleteQuotes(var Buffer: string): string;

{ Convert string to C-escape string format }
function ConvStr(Value: string): string;

{ Convert string from C-escape string format }
function UnconvStr(Value: string): string;

{ Extract substring up to delimiters }
function StrTok(var Buffer: string; Delim: string): string;

{ Extract substring up to delimiters with string processing }
function StrTokEx(var Buffer: string; Delim: string): string;

{**************** Functions for params string processing *********************}

{ Extract parameter value by it index }
function ExtractParamByNo(Buffer: string; KeyNo: Integer): string;

{ Extract parameter value by it name }
function ExtractParam(Buffer, Key: string): string;

{ Split params string }
procedure SplitParams(Buffer: string; ParamNames, ParamValues: TStringList);

implementation

{ Check if delemiter }
function IsDelim(Value: Char): Boolean;
begin
  Result := (Pos(Value,tokDELIM) <> 0);
end;

{ Check if white space }
function IsWhite(Value: Char): Boolean;
begin
  Result := Value in [tokSPACE,tokTAB,tokNL,tokCR];
end;

{ Check if digit }
function IsDigit(Value: Char): Boolean;
begin
  Result := Value in ['0'..'9'];
end;

{ Check if alpha }
function IsAlpha(Value: Char): Boolean;
begin
  Result := (not IsDelim(Value)) and (not IsDigit(Value));
end;

{ Check if quotes }
function IsQuote(Value: Char): Boolean;
begin
  Result := Value in ['"',''''];
end;

{ Check if end of line }
function IsEOL(Value: Char): Boolean;
begin
  Result := Value in [tokNL,tokCR];
end;

{ Convert string to C-escape string format }
function ConvStr(Value: string): string;
var
  I, Add, Len: Integer;
  Ptr: PChar;
begin
  Add := 0;
  Len := Length(Value);
  for I := 1 to Len do
    if Value[I] in ['''','"','\',#9,#10,#13,#0] then
      Inc(Add);
  SetLength(Result, Len + Add);
  Ptr := PChar(Result);
  for I := 1 to Len do
  begin
    if Value[I] in ['''','"','\',#9,#10,#13,#0] then
    begin
      Ptr^ := '\';
      Inc(Ptr);
      case Value[I] of
        #9:  Ptr^ := 't';
        #10: Ptr^ := 'n';
        #13: Ptr^ := 'r';
        #0:  Ptr^ := '0';
        else Ptr^ := Value[I];
      end;
    end else
      Ptr^ := Value[I];
    Inc(Ptr);
  end;
end;

{ Convert string from C-escape string format }
function UnconvStr(Value: string): string;
var
  N: Integer;
  Ptr1, Ptr2: PChar;
begin
  SetLength(Result, Length(Value)+1);
  Ptr1 := PChar(Value);
  Ptr2 := PChar(Result);
  N := 0;
  while Ptr1^ <> #0 do
  begin
    if Ptr1^ <> '\' then
      Ptr2^ := Ptr1^
    else begin
      Inc(Ptr1);
      if Ptr1 = #0 then Break;
      case Ptr1^ of
        'n': Ptr2^ := #10;
        'r': Ptr2^ := #13;
        't': Ptr2^ := #9;
        '0': Ptr2^ := #0;
        else Ptr2^ := Ptr1^;
      end;
    end;
    Inc(N);
    Inc(Ptr1);
    Inc(Ptr2);
  end;
  SetLength(Result, N);
end;

{ Extract lowerlevel token }
function ExtractToken(var Buffer, Token: string): TTokenType;
label ExitProc;
var
  P: Integer;
  Quote: string;
begin
  P := 1;
  Result := ttUnknown;
  Token  := '';
  if Buffer = '' then Exit;

  while IsWhite(Buffer[P]) do
  begin
    Inc(P);
    if Length(Buffer) < P then
      goto ExitProc;
  end;

  if IsDelim(Buffer[P]) then
  begin
    Result := ttDelim;
    Token  := Buffer[P];
    Inc(P);
    goto ExitProc;
  end;

  if IsQuote(Buffer[P]) then
  begin
    Quote  := Buffer[P];
    Result := ttString;
    Token  := Quote;
    Inc(P);
    while P <= Length(Buffer) do
    begin
      Token := Token + Buffer[P];
      Inc(P);
      if (Buffer[P-1] = Quote) and (Buffer[P-2] <> '\') then
        Break;
    end;
  end
  else
  begin
    if IsDigit(Buffer[P]) then Result := ttDigit
    else Result := ttAlpha;
    while P <= Length(Buffer) do
    begin
      Token := Token + Buffer[P];
      Inc(P);
      if (P > Length(Buffer)) or IsDelim(Buffer[P]) or IsQuote(Buffer[P]) then
        Break;
    end;
  end;

ExitProc:
  Delete(Buffer, 1, P-1);
end;

{ Putback lexem to buffer }
procedure PutbackToken(var Buffer: string; Value: string);
begin
  if Value <> '' then
    Buffer := Value + {tokSPACE +} Buffer;
end;

{ Delete begin and end quotes }
function DeleteQuotes(var Buffer: string): string;
begin
  if Buffer = '' then Exit;
  if IsQuote(Buffer[1]) then
    if Buffer[1] = Buffer[Length(Buffer)] then
      Buffer := Copy(Buffer, 2, Length(Buffer)-2)
    else
      Buffer := Copy(Buffer, 2, Length(Buffer)-1);
  Result := Buffer;
end;

{ Extract param value by it index }
function ExtractParamByNo(Buffer: string; KeyNo: Integer): string;
var
  N: Integer;
  Token: string;
  TokenType: TTokenType;
begin
  N := -1;
  Result := '';
  while (Buffer <> '') and (N < KeyNo) do
  begin
    TokenType := ExtractToken(Buffer, Token);
    if TokenType in [ttAlpha, ttDigit] then
      Inc(n);
    if (Token = '=') and (N < KeyNo) then
      ExtractToken(Buffer, Token);
  end;

  if N <> KeyNo then Exit;

  ExtractToken(Buffer, Token);
  if Token <> '=' then Exit;

  TokenType := ExtractToken(Buffer, Token);
  if TokenType = ttString then
    DeleteQuotes(Token);
  Result := Token;
end;

{ Extract param value by it name }
function ExtractParam(Buffer, Key: string): string;
var
  Token: string;
  TokenType: TTokenType;
begin
  while Buffer <> '' do
  begin
    ExtractToken(Buffer, Token);
    if Token = Key then break;
    if Token = '=' then
      ExtractToken(Buffer, Token);
  end;

  if Buffer = '' then Exit;

  ExtractToken(Buffer, Token);
  if Token <> '=' then Exit;

  TokenType := ExtractToken(Buffer, Token);
  if TokenType = ttString then
    DeleteQuotes(Token);
  Result := Token;
end;

{ Split params string }
procedure SplitParams(Buffer: string; ParamNames, ParamValues: TStringList);
var
  Token: string;
  TokenType: TTokenType;
begin
  if Assigned(ParamNames) then  ParamNames.Clear;
  if Assigned(ParamValues) then ParamValues.Clear;

  while Buffer <> '' do
  begin
    TokenType := ExtractToken(Buffer, Token);
    if TokenType in [ttUnknown, ttDelim] then
      Continue;

    if TokenType = ttString then
      DeleteQuotes(Token);
    if Assigned(ParamNames) then
      ParamNames.Add(Token);

    ExtractToken(Buffer, Token);
    if Token <> '=' then
    begin
      PutbackToken(Buffer, Token);
      if Assigned(ParamValues) then
        ParamValues.Add('');
    end
    else
    begin
      TokenType := ExtractToken(Buffer, Token);
      if TokenType = ttString then
        DeleteQuotes(Token);

      if TokenType in [ttDelim, ttUnknown] then
      begin
        if Assigned(ParamValues) then
          ParamValues.Add('');
      end else
        if Assigned(ParamValues) then
          ParamValues.Add(Token);
    end;
  end;
end;

{ Extract high level lexem }
function ExtractHighToken(var Buffer: string; Cmds:TStringList;
  var Token: string; var CmdNo: Integer): TTokenType;
var
  I: Integer;
  TempToken: string;
  TokenType: TTokenType;
begin
  TokenType := ExtractToken(Buffer, Token);
  CmdNo := -1;

{ Extract float numbers }
  if (TokenType = ttDigit) and (Buffer[1] = '.') then
  begin
    ExtractToken(Buffer, TempToken);
    Token := Token + TempToken;
    if IsDigit(Buffer[1]) then
    begin
      ExtractToken(Buffer, TempToken);
      Token := Token + TempToken;
    end;
  end;

{ Define command index }
  if (TokenType = ttAlpha) and Assigned(Cmds) then
  begin
    for I := 0 to Cmds.Count-1 do
      if Cmds[I] = Token then
      begin
        CmdNo := I;
        TokenType := ttCommand;
        Break;
      end;
  end;

  Result := TokenType;
end;

{ Extract hight level lexem }
function ExtractTokenEx(var Buffer, Token: string): TTokenType;
var
  P: Integer;
  TokenType: TTokenType;
begin
  repeat
    TokenType := ExtractToken(Buffer, Token);
  until (Token <> tokNL) and (Token <> tokCR);

  if Token = '[' then
  begin
    TokenType := ttAlpha;
    P := Pos(']',Buffer);
    Token := '';
    if P > 0 then
    begin
      Token  := Copy(Buffer, 1, P-1);
      Delete(Buffer, 1, P);
//      Buffer := Copy(Buffer,p+1,Length(Buffer)-p);
    end;
  end;
  Result := TokenType;
end;

{ Extract substring up to delimiters }
function StrTok(var Buffer: string; Delim: string): string;
var
  S, N: Integer;
begin
  N := 1;
  while (N <= Length(Buffer)) and (Pos(Buffer[N], Delim)>0) do
    Inc(N);
  S := N;
  while (N <= Length(Buffer)) and (Pos(Buffer[N], Delim)=0) do
    Inc(N);
  Result := Copy(Buffer, S, N-S);
  Delete(Buffer, 1, N-1);
end;

{ Extract substring up to delimiters with string processing }
function StrTokEx(var Buffer: string; Delim: string): string;
var
  S, N: Integer;
  Quote: Char;
begin
  N := 1;
  Result := '';
  while (N <= Length(Buffer)) and (Pos(Buffer[N], Delim)>0) do
    Inc(N);
  S := N;
  if Buffer[N] in ['''','"'] then
  begin
    Quote := Buffer[N];
    Inc(N);
    while (N <= Length(Buffer)) and (Buffer[N] <> Quote) do
      Inc(N);
    Result := Copy(Buffer, S, N-S+1);
    Delete(Buffer, 1, N);
  end else
    Result := StrTok(Buffer, Delim);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品视频在线观看免费| 国产在线播放一区| 日韩欧美一区二区不卡| 成人av电影免费观看| 天堂在线一区二区| 亚洲人快播电影网| 久久精品夜色噜噜亚洲aⅴ| 精品视频在线免费观看| 懂色av一区二区三区免费看| 奇米影视一区二区三区| 一区二区欧美视频| 欧美韩国日本综合| 久久免费电影网| 日韩一级大片在线观看| 欧美系列在线观看| 99久久久免费精品国产一区二区| 精品一区二区三区欧美| 亚洲综合男人的天堂| 国产精品久久久久影视| 久久亚洲一区二区三区四区| 欧美精品高清视频| 在线精品视频一区二区三四| 成人av电影在线| 国产福利一区二区| 精品一区二区三区日韩| 免费看欧美美女黄的网站| 亚洲制服丝袜一区| 亚洲综合色自拍一区| 亚洲老司机在线| 中文字幕在线播放不卡一区| 国产欧美日韩精品在线| 久久久国产综合精品女国产盗摄| 欧美刺激脚交jootjob| 日韩欧美www| 日韩免费电影一区| 日韩限制级电影在线观看| 88在线观看91蜜桃国自产| 欧美日韩一区视频| 欧美人牲a欧美精品| 欧美另类videos死尸| 欧美理论在线播放| 3751色影院一区二区三区| 欧美一级在线视频| 日韩免费视频线观看| 精品国产一区a| 亚洲精品在线观| 久久久精品国产99久久精品芒果| 国产亚洲成aⅴ人片在线观看| 国产亚洲一二三区| 中文字幕一区二区三区精华液| 国产精品日产欧美久久久久| 亚洲色图在线看| 一区二区国产盗摄色噜噜| 五月开心婷婷久久| 美女视频黄 久久| 国产成人免费视频一区| 99久久久久久99| 欧美性一级生活| 欧美日韩久久久一区| 欧美r级电影在线观看| 中文字幕巨乱亚洲| 一区二区三区欧美久久| 石原莉奈在线亚洲二区| 久久99精品久久久久久久久久久久| 国产乱码精品一区二区三| 成年人网站91| 777午夜精品视频在线播放| 久久久久久久综合| 亚洲天堂成人在线观看| 亚欧色一区w666天堂| 国产综合久久久久久鬼色| gogogo免费视频观看亚洲一| 欧美探花视频资源| 欧美草草影院在线视频| 成人欧美一区二区三区白人 | 亚洲国产精品视频| 麻豆中文一区二区| 99视频超级精品| 欧美一区二区私人影院日本| 国产性天天综合网| 亚洲一级不卡视频| 国产中文字幕精品| 在线观看视频一区二区欧美日韩| 精品入口麻豆88视频| 亚洲精品免费电影| 国内成人精品2018免费看| 一本久道中文字幕精品亚洲嫩| 欧美成人bangbros| 一区二区国产视频| 成人午夜激情在线| 91精品国产麻豆| 亚洲女女做受ⅹxx高潮| 极品美女销魂一区二区三区 | 91精品国产欧美一区二区18| 国产日韩精品一区二区三区在线| 亚洲综合另类小说| 波多野结衣一区二区三区| 欧美乱妇一区二区三区不卡视频| 久久久国际精品| 奇米影视在线99精品| 色香蕉久久蜜桃| 国产调教视频一区| 免费在线观看视频一区| 欧美主播一区二区三区| 中文文精品字幕一区二区| 美日韩一区二区三区| 欧美偷拍一区二区| 亚洲欧美综合网| 国产成人免费9x9x人网站视频| 欧美一区欧美二区| 亚洲午夜一区二区三区| 播五月开心婷婷综合| 精品剧情在线观看| 91精彩视频在线观看| 精品国产亚洲一区二区三区在线观看| 亚洲一区二区三区四区在线观看| 懂色av一区二区三区蜜臀| 欧美成人性福生活免费看| 日韩电影在线免费观看| 欧美亚洲另类激情小说| 亚洲日本一区二区| 91小视频免费观看| 亚洲国产成人在线| 国产一区二区在线观看免费 | 精品乱人伦小说| 免费在线观看视频一区| 777亚洲妇女| 日韩国产高清影视| 3d成人动漫网站| 日本午夜精品视频在线观看| 欧美老肥妇做.爰bbww视频| 亚洲人成网站色在线观看| 99九九99九九九视频精品| 国产女同互慰高潮91漫画| 国产一区二区h| 久久精品一区八戒影视| 国产成人亚洲综合a∨猫咪| 久久婷婷国产综合精品青草| 国产在线麻豆精品观看| 久久欧美中文字幕| 丁香啪啪综合成人亚洲小说| 中文字幕欧美国产| 99久久99久久精品免费看蜜桃| 亚洲丝袜制服诱惑| 在线免费观看日本一区| 亚洲国产精品一区二区久久| 欧美日韩精品系列| 另类的小说在线视频另类成人小视频在线 | 懂色av噜噜一区二区三区av| 中文一区一区三区高中清不卡| 国产高清精品网站| √…a在线天堂一区| 色婷婷亚洲综合| 午夜影院久久久| 欧美videos中文字幕| 国产一区二区三区观看| 中文字幕不卡三区| 在线免费观看不卡av| 人人爽香蕉精品| 久久久精品人体av艺术| av亚洲精华国产精华| 午夜一区二区三区在线观看| 日韩欧美黄色影院| 成人免费视频一区| 亚洲妇熟xx妇色黄| 日韩欧美成人午夜| 不卡av电影在线播放| 亚洲国产精品久久一线不卡| 日韩精品中午字幕| kk眼镜猥琐国模调教系列一区二区| 亚洲一线二线三线视频| 欧美成人三级在线| 91麻豆6部合集magnet| 五月天亚洲婷婷| 国产精品水嫩水嫩| 在线成人免费观看| 成人一道本在线| 日韩vs国产vs欧美| 国产精品天美传媒沈樵| 欧美群妇大交群的观看方式| 国产91精品精华液一区二区三区| 亚洲午夜精品在线| 国产亚洲精品超碰| 欧美日韩激情在线| 成人精品国产免费网站| 午夜欧美大尺度福利影院在线看| 国产欧美日韩精品在线| 欧美男生操女生| 国产欧美日韩视频一区二区| 欧美三级午夜理伦三级中视频| 精品一区二区三区视频| 亚洲狠狠爱一区二区三区| 国产日韩欧美精品电影三级在线| 精品视频一区三区九区| 成人av免费网站| 国产一区二区免费在线| 香蕉加勒比综合久久| 亚洲图片激情小说| 久久欧美一区二区| 日韩一级成人av|