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

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

?? hwexprext.pas

?? 用于Delphi程序中嵌入公式解析
?? PAS
?? 第 1 頁 / 共 5 頁
字號(hào):
            procedure Clear; override;
            { 返回實(shí)際可操作的IValue }
            function GetIValue(Obj: IValue; const aName: string;
                               aParams: TParameterList): IValue;
            { 下面屬性用于取得注冊(cè)的成員信息,主要用于顯示給用戶 }
            property Items[Index: Cardinal]: PMemberInfo read GetItem;
            property ItemsName;
            property Member[const AName: string]: PMemberInfo read GetMember;
            property OwnerClassName: string read GetClassName;
            property OwnerClass: TClass Read FOwnerClassType;
            property Syntax[const AMemberName: string]: string read GetMemberSyntax;
        Published
            property Count;
        end;

        { ---------------------------------------------------------------------
          Class : TClassContext
          注冊(cè)類Context。在本表中存儲(chǔ)有需要在表達(dá)式中訪問的類及其相關(guān)屬性
          -------------------------------------------------------------------- }
        TClassContext = class(TExprContext)
        Private
            function GetItem(Index: Cardinal): TClassMemberContext;
            function GetMemberContext(const AClassName: string): TClassMemberContext;
        Public
            constructor Create(AOwner: TAbstractContextSet);
            destructor Destroy; override;
            function Add(const AClassType: TClass): TClassMemberContext;
            { DONE -oCharmer -c表達(dá)式解析與運(yùn)算 : 用什么方式使用類型信息比較好 ? }
            function ValidMember(const AClassName, AMemberName: String): Boolean;
            procedure Clear; override;
            procedure Delete(Index: Cardinal); overload; override;
            procedure Delete(const AName: string); overload; override;
            function IDF(obj: IValue; const Identifier: string;
                     ParameterList: TParameterList): IValue;
            property Items[Index: Cardinal]: TClassMemberContext read GetItem;
            property ItemsName;
            property MemberContext[const AClassName: string]: TClassMemberContext
                     read GetMemberContext;
        Published
            property Count;
        end;
        { ---------------------------------------------------------------------
          Class : TObjectContext
          對(duì)象Context。用于表達(dá)式通過對(duì)象名稱標(biāo)識(shí)符訪問對(duì)象
          -------------------------------------------------------------------- }
        TObjectContext = class(TExprContext)
        Private
            function GetItem(Index: Cardinal): TObject;
        Public
            constructor Create(AOwner: TExprContextSet);
            destructor Destroy; override;
            procedure Add(const AName: String; Obj: TObject);
            procedure Delete(Index: Cardinal); overload; override;
            procedure Delete(const AName: string); overload; override;
            function GetObject(const AName: string): IValue;
            property Items[Index: Cardinal]: TObject read GetItem;
            property ItemsName;
        Published
            property Count;
        end;
        { ---------------------------------------------------------------------
          Class :
          擴(kuò)展公式上下文表
          -------------------------------------------------------------------- }
        TExtFuncContext = class(TExprContext)
        Private
            { 由于IValue的TestParameters方法僅返回True/False,因此在請(qǐng)求函數(shù)
              時(shí)先檢查一下參數(shù),以便于提供更多的出錯(cuò)信息 }
            function CheckParams(ADeclare: TExtFunctionDeclare;
                                 APassParams: TParameterList): Boolean;
        Protected
            //procedure SaveToStream(AStream: TrptStream);
            //procedure LoadFromStream(AStream: TrptStream);
            procedure Delete(Index: Cardinal); overload; override;
            procedure Delete(const AName: string); overload; override;
        Public
            constructor Create(AOwner: TAbstractContextSet);
            destructor  Destroy; override;
            procedure AddFunc(const AFuncName: string;
                              const AResultType: TExprType;
                              ParamList: Array of TExprType;
                              ExtFunc: TExtFuncImplementation;
                              const ADescription: string);overload;
            procedure AddFunc(const AFuncName: string;
                              const ParamNames: array of string;
                              const ParamTypes: array of TExprType;
                              const AResultType: TExprType;
                              ExtFunc: TExtFuncImplementation;
                              const ADescription: String); overload;
            procedure Clear; override;
            function GetFunc(const AName: string; APassParams: TParameterList): TFunction;
            function GetFuncDeclare(const AName: string): TExtFunctionDeclare; overload;
            function GetFuncDeclare(Index: integer): TExtFunctionDeclare; overload;
        Published
            property Count;
        end;

        { ---------------------------------------------------------------------
          Class : TUserFuncTemplateContext
          用戶定義公式模板Context
          -------------------------------------------------------------------- }
        TUserFuncTemplateContext = class(TExprContext)
        Protected
            procedure SaveToStream(AStream: TExprStream);
            procedure LoadFromStream(AStream: TExprStream);
        Public
            constructor Create(AOwner: TAbstractContextSet);
            destructor  Destroy; override;
            function Add(const AFuncName: string;
                         const AResultType: TExprType): TExprTemplate; overload;
            procedure Add(ATemplate: TExprTemplate); overload;
            procedure Delete(const AName: string); overload; override;
            procedure Delete(Index: Cardinal); overload; override;
            procedure Clear; override;
            function GetTemplate(const AName: string): TExprTemplate; overload;
            function GetTemplate(const Index: Cardinal): TExprTemplate; overload;
            property ItemsName;
        Published
            property Count;
        end;

        { 注:最好在UserEvalFunction和UserCompileFunction兩者間只選擇一個(gè)用 }
        { 編譯型用戶定義公式Context }

        TUserCompileFuncContext = class(TExprContext)
        Public
            constructor Create(AOwner: TAbstractContextSet);
            destructor Destroy; override;
            procedure Add(AFuncTemplate: TExprTemplate);
            procedure Delete(const AName: string); overload; override;
            procedure Delete(Index: Cardinal); Overload; override;
            procedure Clear; override;
            function GetFunc(const AName: string; APassParams: TParameterList): TFunction;
            function GetUCFI(Index: Cardinal): TAbstractExtFunction; overload;
            function GetUCFI(AName: string): TAbstractExtFunction; overload;
        Published
            property Count;
        end;

        { 抽象類,用于用戶擴(kuò)展ContextSet。 }
        TAbstractContextSet = class
        Public
            function Has(const Identifier: string): Boolean; virtual; abstract;
            function ExtIdent(Obj: IValue; const Identifier: String;
                     ParameterList: TParameterList): IValue; virtual; abstract;
        end;

        { 上下文表集合 }
        TExprContextSet = class(TAbstractContextSet)
        private
            FConstants        : TConstantContext;
            FExtFunctions     : TExtFuncContext;
            FExprTemplates    : TUserFuncTemplateContext;
            FCompileFunctions : TUserCompileFuncContext;
            FRegistedClasses  : TClassContext;
            FObjects          : TObjectContext;
            FEnumerations     : TEnumerationContext;
            { 用戶定義的ContextSet,用戶可以通過指定自定義的上下文表集合擴(kuò)展
              應(yīng)用。或者情況反過來,由用戶ContextSet包含GlobalContextSet,并
              由用戶決定先查詢哪些表 }
            FUserContextSet   : TAbstractContextSet;
        Public
            constructor Create;
            destructor Destroy; override;
            function Has(const Identifier: string): Boolean; override;
            { IDF }
            function ExtIdent(Obj: IValue; const Identifier: string;
                     ParameterList: TParameterList): IValue; override;
            procedure SaveToStream(AStream: TExprStream);
            procedure LoadFromStream(AStream: TExprStream);
        Published
            property Constants       : TConstantContext read FConstants;
            property ExtFunctions    : TExtFuncContext read FExtFunctions;
            property ExprTemplates   : TUserFuncTemplateContext read FExprTemplates;
            property CompileFunctions: TUserCompileFuncContext read FCompileFunctions;
            property RegistedClasses : TClassContext read FRegistedClasses;
            property Objects         : TObjectContext read FObjects;
            property Enumerations    : TEnumerationContext read FEnumerations;
            property UserContextSet  : TAbstractContextSet read FUserContextSet write FUserContextSet;
        end;

        { 這個(gè)函數(shù)沒有IdentifierFunciton參數(shù),以GlobalContextset.ExtIdent替代 }
        function CreateExpression2(const S : string): IValue;

        procedure AddExtFunc(const AFuncName: string;
                             const AResultType: TExprType;
                             ParamList: Array of TExprType;
                             ExtFunc: TExtFuncImplementation;
                             const ADescription: string); overload;
        procedure AddExtFunc(const AFuncName: string;
                             const ParamNames: array of string;
                             const ParamTypes: array of TExprType;
                             const AResultType: TExprType;
                             ExtFunc: TExtFuncImplementation;
                             const ADescription: String); overload;
        { 擴(kuò)展函數(shù)示例 }
        function Extfunc_ShowMessage(ParameterList: TParameterList): IValue;

var
        { 全局常量集合 }
        GlobalContextSet: TExprContextSet;
implementation

{ ============================================================================
  >>>>   Class Implementation Begin                                       <<<<
  >>>>   Class Name  : TAbstractExtFunction
  >>>>   Description :
  >>>>   Create Date :
  ---------------------------------------------------------------------------- }
procedure TAbstractExtFunction.SetFuncName(const AName: string);
begin
        FFuncName := AName;
end;

procedure TAbstractExtFunction.SetResultType(const AType: TExprType);
begin
        FResultType := AType;
end;

procedure TAbstractExtFunction.SetAdditionType(const ATypeName: string);
begin
        FAdditionType := TypeName;
end;

function TAbstractExtFunction.GetTypeName: string;
var     pti: PTypeInfo;
begin
        pti := System.TypeInfo(TExprType);
        if not (FResultType in [ttObject, ttEnumerated]) then
        begin
            Result := GetEnumName(pti, Integer(FResultType));
        end
        else
        begin
            if FAdditionType <> '' then
                Result := FAdditionType
            else Result := GetEnumName(pti, Integer(FResultType));
        end;
end;

function TAbstractExtFunction.GetSyntax: String;
var     i : Integer;
        S : string;
begin
        S := FunctionName + '(';
        if Self.ParamsCount > 0 then
        begin
            for i := 0 to ParamsCount -1 do
            begin
                S := S + Self.ParamsName[i]
                   + ': ' + ExprTypeName[Self.ParamsType[i]] + '; ';
            end;
            S := Copy(S, 1, Length(S) -2);
        end;
        S := S + '): ' + ExprTypeName[ResultType];
        Result := S;
end;

procedure TAbstractExtFunction.SaveToStream(AStream: TExprStream);
begin
        AStream.SaveString(FunctionName);
        AStream.SaveInteger(Integer(Self.ResultType));
        AStream.SaveString(Description);
end;

procedure TAbstractExtFunction.LoadFromStream(AStream: TExprStream);
begin
        SetFuncName(AStream.LoadString);
        SetResultType(TExprType(AStream.LoadInteger));
        FDescription := AStream.LoadString;
end;
{ Charmer Ext }
{ ============================================================================ }
{ 用戶自定義函數(shù)部分:由表達(dá)式構(gòu)成的函數(shù)。
  這部分內(nèi)容包含如下類:
        TExprTemplate          ----> 自定義函數(shù)模板
        TUserEvalFunction      ----> 解釋型函數(shù),即時(shí)編譯
        TUserCompileFunction   ----> 預(yù)編譯型函數(shù)算子
        TUCFImplementation     ----> 預(yù)編譯函數(shù)執(zhí)行體
  ============================================================================ }
type
        TParamRec = record
            ParamName: string;
            ParamType: TExprType;
        end;

        PParamRec = ^TParamRec;
        { ******************************************************* }
        { User evaluate function }
        { 用戶定義的公式算子。本對(duì)象只有在請(qǐng)求時(shí)才被Context根據(jù)相關(guān)模
          板創(chuàng)建,類似于解釋型運(yùn)行方式。參見另一類用戶定義函數(shù)
          User compile function }
        TUserEvalFunction = class(TExpression)
        Private
            FPrivateParams: TParameterList; //本公式私有參數(shù)
            FTemplate: TExprTemplate; //公式模板
            FValue: IValue;
            function IDF(Obj: IValue; const Identifier: string;
                ParameterList: TParameterList): IValue;
        Public
            constructor Create(const ATemplate: TExprTemplate; ParameterList: TParameterList);
            destructor Destroy; override;
            function AsBoolean : boolean; override;
            function AsFloat   : double; override;
            function AsInteger : integer; override;
            function AsObject  : TObject; override;
            function AsString  : string; override;
            function ExprType  : TExprType; override;
            //function CanReadAs(aType : TExprType): boolean;
            function TestParameters: Boolean; override;
        end;

        { 預(yù)編譯用戶函數(shù)執(zhí)行體 }
        TUCFImplementation = class(TAbstractExtFunction)
        Private
            FSyntax: string;
            FPrivateParams: TList;
            FExprValue: IValue;
            FIdentifierContextSet: TAbstractContextSet;
            function GetParamsCount: Integer; override;
            function GetParamsName(Index: integer): String; override;
            function GetParamsType(Index: integer): TExprType; override;
            function GetSyntax: string; override;
            function IDF(Obj: IValue; const Identifier: string;
                ParameterList: TParameterList): IValue;
        Public
            constructor Create(const ATemplate: TExprTemplate);
            destructor Destroy; override;
            function Param(Index: Integer): TVarLiteral;
            function AsBoolean: Boolean;
            function AsInteger: Integer;
            function AsFloat: double;
            function AsString: string;
            function AsObject: TObject;
            procedure SetParam(Index: integer; Value: IValue);
            property ParamsName;
            property ParamsType;
        Published
            property ParamsCount;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国三级在线一区| 久久久精品一品道一区| 国产精品理论在线观看| 日本特黄久久久高潮| 91同城在线观看| 欧美精品一区二区久久久| 亚洲精品视频在线看| 国产麻豆精品在线观看| 欧美三级视频在线| 国产精品成人一区二区艾草| 激情伊人五月天久久综合| 欧美色成人综合| 国产精品美女久久久久av爽李琼| 免费在线观看精品| 欧美在线啊v一区| 国产精品久久免费看| 精品一区中文字幕| 欧美福利视频导航| 亚洲亚洲人成综合网络| 不卡视频免费播放| 国产视频视频一区| 精一区二区三区| 91麻豆精品国产91久久久使用方法 | 99久久国产免费看| 国产色婷婷亚洲99精品小说| 麻豆91在线观看| 欧美日韩午夜精品| 一区二区三区四区中文字幕| 99久久免费视频.com| 久久综合色婷婷| 另类人妖一区二区av| 91精品国产综合久久久久久久久久| 一区二区高清在线| 色一情一伦一子一伦一区| 中文字幕亚洲视频| av激情亚洲男人天堂| 欧美激情一区二区三区四区| 国产精品一区二区三区四区| 久久伊人中文字幕| 国内精品自线一区二区三区视频| 日韩视频永久免费| 裸体健美xxxx欧美裸体表演| 日韩一级二级三级精品视频| 日韩国产一区二| 337p亚洲精品色噜噜噜| 青青草97国产精品免费观看| 91精品国产综合久久福利软件| 午夜电影一区二区| 欧美精品99久久久**| 日韩av高清在线观看| 欧美一二三区在线观看| 久久99久久99| 久久精品一区蜜桃臀影院| 国产91高潮流白浆在线麻豆| 国产精品美女一区二区三区| 不卡一卡二卡三乱码免费网站| 综合网在线视频| 欧洲一区在线电影| 婷婷亚洲久悠悠色悠在线播放| 欧美精品1区2区| 日韩av一区二区三区| 精品国产一区二区精华| 国产成人综合亚洲网站| 国产精品电影一区二区| 日本道精品一区二区三区| 亚洲成人免费影院| 欧美一二三区在线| 国产精品 日产精品 欧美精品| 国产午夜亚洲精品不卡| www.在线成人| 夜夜嗨av一区二区三区中文字幕| 欧美色欧美亚洲另类二区| 日本欧美在线看| 久久综合精品国产一区二区三区| 成人午夜激情视频| 亚洲精品日产精品乱码不卡| 欧美嫩在线观看| 精久久久久久久久久久| 欧美激情一区二区在线| 欧美在线视频你懂得| 麻豆精品久久精品色综合| 久久九九99视频| 欧美无乱码久久久免费午夜一区| 蜜桃av一区二区三区| 欧美激情一区二区三区不卡| 日本道色综合久久| 久久99精品一区二区三区| 国产精品乱子久久久久| 欧美色精品在线视频| 国产一区二区三区香蕉| 亚洲天天做日日做天天谢日日欢 | 97久久精品人人爽人人爽蜜臀 | 久久午夜色播影院免费高清| 91在线精品一区二区三区| 日日骚欧美日韩| 国产视频在线观看一区二区三区| 精品一区二区久久| 丝瓜av网站精品一区二区| 亚洲在线视频网站| 精品日韩一区二区三区免费视频| 国产福利91精品一区| 亚洲综合成人在线视频| 精品黑人一区二区三区久久| 99久久国产综合色|国产精品| 免费av成人在线| 国产精品久久99| 日韩精品一区二区在线观看| 99久久免费精品高清特色大片| 蜜桃av一区二区| 亚洲精品视频在线| 久久精品视频免费| 欧美一区国产二区| 97久久超碰国产精品电影| 精品一区二区在线播放| 亚洲一级二级在线| 国产精品美女久久久久久久| 日韩你懂的在线播放| 色av成人天堂桃色av| 国产成人免费视频| 美女网站一区二区| 亚洲宅男天堂在线观看无病毒| 欧美极品少妇xxxxⅹ高跟鞋| 91精品午夜视频| 一本到不卡免费一区二区| 国产成人自拍网| 久久精品久久综合| 亚洲国产视频一区| 亚洲视频1区2区| 欧美国产一区在线| 精品国产sm最大网站免费看| 欧美区在线观看| 色av一区二区| 99国产精品一区| 成人激情开心网| 国产精品一二一区| 狠狠久久亚洲欧美| 久久99久久99| 欧美aaa在线| 亚洲国产精品久久久男人的天堂| 综合色天天鬼久久鬼色| 欧美激情艳妇裸体舞| 精品国产一区二区三区不卡| 3d动漫精品啪啪| 欧美色倩网站大全免费| 在线观看网站黄不卡| 99v久久综合狠狠综合久久| 岛国精品在线播放| 国产精品一区久久久久| 极品美女销魂一区二区三区| 另类欧美日韩国产在线| 久久成人久久鬼色| 久久精品999| 激情五月激情综合网| 免费观看久久久4p| 日本在线不卡视频一二三区| 五月婷婷色综合| 天天亚洲美女在线视频| 五月天视频一区| 天天影视色香欲综合网老头| 午夜成人免费电影| 亚洲资源中文字幕| 亚洲国产成人91porn| 亚洲高清免费在线| 偷拍一区二区三区| 日本美女一区二区| 久久99精品久久久久久久久久久久| 免费看欧美女人艹b| 日本中文在线一区| 国产一区二区三区在线看麻豆| 国产九九视频一区二区三区| 国产成人亚洲精品狼色在线| 成人黄色软件下载| av亚洲精华国产精华精| 色综合中文字幕国产 | 91偷拍与自偷拍精品| 91在线精品秘密一区二区| 91福利资源站| 欧美一区二区视频在线观看2020| 日韩限制级电影在线观看| 亚洲精品在线电影| 国产欧美日韩在线看| 亚洲人成电影网站色mp4| 一区二区三区中文免费| 亚洲成人av资源| 另类小说视频一区二区| 国产成人精品亚洲日本在线桃色| 成人av网站在线| 欧美午夜影院一区| 日韩一区二区在线免费观看| 久久伊人中文字幕| 亚洲人午夜精品天堂一二香蕉| 亚洲国产精品一区二区www在线| 免费在线看一区| 成人精品视频一区| 欧美日韩日日骚| 久久久精品中文字幕麻豆发布| 亚洲人成在线播放网站岛国| 一区二区三区日本| 日本视频在线一区| jvid福利写真一区二区三区|