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

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

?? hwexpr.pas

?? 用于Delphi程序中嵌入公式解析
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
unit hwExpr;

{ TODO -oCharmer -c表達式解析與運算 : 重寫Parser部分,以便于解析更復雜的表達式 }
{ 添加了DateTime類型,以及相關的類型轉換DateTime()和Delphi內置的日期時間型函數
  中的21個。 }

interface

uses
        TypInfo,
        Classes,
        SysUtils;

type
        TExprType = (ttObject, ttString, ttDateTime, ttFloat, ttInteger,
                     ttEnumerated, ttBoolean);

        EExpression = class (Exception)
        end;

        IValue = interface (IUnknown)
            function AsBoolean: boolean;
            function AsFloat: double;
            function AsInteger: integer;
            function AsObject: TObject;
            function AsString: string;
            function AsDateTime: TDateTime;
            function CanReadAs(aType : TExprType): boolean;
            function ExprType: TExprType;
            function TestParameters: boolean;
            function TypeInfo: PTypeInfo;
            function ClassRef: TClass;
            function TypeName: string;
        end;
  
        TExpression = class (TInterfacedObject, IValue)
        Protected
            function TestParameters: boolean; Virtual;
        Public
            constructor Create;
            destructor Destroy; Override;
            function AsBoolean: boolean; Virtual;
            function AsFloat: double; Virtual;
            function AsInteger: integer; Virtual;
            function AsObject: TObject; Virtual;
            function AsString: string; Virtual;
            function AsDateTime: TDateTime; Virtual;
            function CanReadAs(aType : TExprType): boolean;
            function ExprType: TExprType; Virtual; Abstract;
            function TypeInfo: PTypeInfo; Virtual;
            function TypeName: string; Virtual;
            function ClassRef: TClass; Virtual;
        end;
  
        TStringLiteral = class (TExpression)
        Private
            FAsString: string;
        Public
            constructor Create(aAsString : string);
            function AsString: string; Override;
            function ExprType: TExprType; Override;
        end;
  
        TFloatLiteral = class (TExpression)
        Private
            FAsFloat: double;
        Public
            constructor Create(aAsFloat : double);
            function AsFloat: double; Override;
            function ExprType: TExprType; Override;
        end;
  
        TIntegerLiteral = class (TExpression)
        Private
            FAsInteger: integer;
        Public
            constructor Create(aAsInteger : integer);
            function AsInteger: integer; Override;
            function ExprType: TExprType; Override;
        end;
  
        TEnumeratedLiteral = class (TIntegerLiteral)
        Private
            Rtti: Pointer;
        Public
            constructor Create(aRtti : Pointer; aAsInteger : integer);
            constructor StrCreate(aRtti : Pointer; const aVal : string);
            function TypeInfo: PTypeInfo; Override;
        end;
  
        TBooleanLiteral = class (TExpression)
        Private
            FAsBoolean: boolean;
        Public
            constructor Create(aAsBoolean : boolean);
            function AsBoolean: boolean; Override;
            function ExprType: TExprType; Override;
        end;

        TDateTimeLiteral = class(TFloatLiteral)
        Public
            constructor Create(aDateTimeValue: TDateTime);
            function AsDateTime: TDateTime; Override;
            function ExprType: TExprType; override;
        end;

        TObjectRef = class (TExpression)
        Private
            FObject: TObject;
            FClassRef: TClass;
        Public
            constructor Create(aObject : TObject; aClassRef: TClass = nil);
            function AsObject: TObject; Override;
            function ExprType: TExprType; Override;
            function TypeInfo: PTypeInfo; Override;
            function ClassRef: TClass; override;
        end;

        { TPersistent對象及其子類的Published屬性 }
        TObjectProperty = class(TExpression)
        Private
            Obj: TObject;
            PropInfo: PPropInfo;
            PropType: TExprType;
        Public
            constructor Create(aObj : IValue; const PropName : string);
            function AsBoolean: boolean; Override;
            function AsFloat: double; Override;
            function AsDateTime: TDateTime; Override;
            function AsInteger: integer; Override;
            function AsObject: TObject; Override;
            function AsString: string; Override;
            function ExprType: TExprType; Override;
            function TypeInfo: PTypeInfo; Override;
        end;

        TParameterList = class (TList)
        Private
            function GetAsBoolean(i : integer): boolean;
            function GetAsFloat(i : integer): double;
            function GetAsInteger(i : integer): integer;
            function GetAsObject(i : integer): TObject;
            function GetAsString(i : integer): string;
            function GetAsDateTime(i : Integer): TDateTime;
            function GetExprType(i : integer): TExprType;
            function GetParam(i : integer): IValue;
        Public
            destructor Destroy; Override;
            function AddExpression(e : IValue): integer;
            property AsBoolean[i: integer]: boolean Read GetAsBoolean;
            property AsFloat[i: integer]: double Read GetAsFloat;
            property AsInteger[i: integer]: integer Read GetAsInteger;
            property AsObject[i: integer]: TObject Read GetAsObject;
            property AsString[i: integer]: string Read GetAsString;
            property AsDateTime[i: Integer]: TDateTime read GetAsDateTime;
            property ExprType[i: integer]: TExprType Read GetExprType;
            property Param[i: integer]: IValue Read GetParam;
        end;
  
        TFunction = class (TExpression)
        Private
            FParameterList: TParameterList;
            function GetParam(n : integer): IValue;
        Protected
            property ParameterList: TParameterList read FParameterList write FParameterList;
        Public
            constructor Create(aParameterList : TParameterList);
            destructor Destroy; Override;
            function ParameterCount: integer;
            property Param[n: integer]: IValue Read GetParam;
        end;

        { 用來顯示內置函數的東西 }
        TIntFuncList = class
        Private
            FIntFuncList: TList;
            function GetFuncName(Index: integer): String;
            function GetFuncSyntax(Index: integer): String;
            function GetFuncDescription(Index: Integer): String;
            function GetFuncList: TStrings;
            function GetCount: integer;
            function GetTypeCastFuncs: TStrings;
            function GetMathFuncs: TStrings;
            function GetStringFuncs: TStrings;
            function GetDateTimeFuncs: TStrings;
        Protected
            procedure AddFunc(const AFuncName, AFuncSyntax, ADescription: string);
        Public
            constructor Create;
            destructor Destroy; override;
            property Count: Integer read GetCount;
            property FuncName[Index: integer]: string read GetFuncName;
            property Syntax[Index: Integer]: String read GetFuncSyntax;
            property Description[Index: integer]: String read GetFuncDescription;
            property FuncList: TStrings read GetFuncList;
            property TypeCastFuncs: TStrings read GetTypeCastFuncs;
            property MathFuncs: TStrings read GetMathFuncs;
            property StringFuncs: TStrings read GetStringFuncs;
            property DateTimeFuncs: TStrings read GetDateTimeFuncs;
        end;
        
        { 外部定義的方法,用于執行由標識符和參數表指定的功能 }
//        TIdentifierFunction = function (const Identifier : string;
//            ParameterList : TParameterList): IValue of object;
        { 為了能夠識別對象成員,將原TIdentifierFunction函數進行了修改,添加了一
          個Obj參數,用于向IDF提供對象以便于識別對象及其成員 }
        TIdentifierFunction = function(obj: IValue; const Identifier: string;
              ParameterList: TParameterList): IValue of Object;
              
        function CheckEnumeratedVal(Rtti : Pointer; const aVal : string): IValue;

        function CreateExpression( const S : string;
                IdentifierFunction : TIdentifierFunction): IValue;

        function FoldConstant( Value : IValue): IValue;

        { 測試使用Parser對象完成解析任務 }
var
        InstanceCount: integer = 0;
        ExprTypeName: array[TExprType] of string =('對象', '字符串', '日期時間',
                    '浮點值', '整數','枚舉', '邏輯值');
        ExprIntFuncList: TIntFuncList;
implementation

uses
  Dialogs;

type
        TOperator = ( opNot,
            opExp,
            opMult, opDivide, opDiv, opMod, opAnd, opShl, opShr,
            opPlus, opMinus, opOr, opXor,
            opEq, opNEq, opLT, opGT, opLTE, opGTE);

        TOperators = set of TOperator;

        TUnaryOp = class (TExpression)
        Private
            Operand: IValue;
            OperandType: TExprType;
            Operator: TOperator;
        Public
            constructor Create(aOperator : TOperator; aOperand : IValue);
            function AsBoolean: boolean; Override;
            function AsFloat: double; Override;
            function AsInteger: integer; Override;
            function ExprType: TExprType; Override;
        end;
  
        TBinaryOp = class (TExpression)
        Private
            Operand1: IValue;
            Operand2: IValue;
            OperandType: TExprType;
            Operator: TOperator;
        Public
            constructor Create(aOperator : TOperator; aOperand1, aOperand2 : IValue);
            function AsBoolean: boolean; Override;
            function AsFloat: double; Override;
            function AsInteger: integer; Override;
            function AsString: string; Override;
            function AsDateTime: TDateTime; override;
            function ExprType: TExprType; Override;
        end;

        TRelationalOp = class (TExpression)
        Private
            Operand1: IValue;
            Operand2: IValue;
            OperandType: TExprType;
            Operator: TOperator;
        Public
            constructor Create(aOperator : TOperator; aOperand1, aOperand2 : IValue);
            function AsBoolean: boolean; Override;
            function AsFloat: double; Override;
            function AsInteger: integer; Override;
            function AsString: string; Override;
            function AsDateTime: TDateTime; Override;
            function ExprType: TExprType; Override;
        end;

const
        MaxStringLength   = 255; { 最大字符串長度 }
        Digits            = ['0'..'9'];

        { 嘗試添加對中文的支持。采用判斷#127..#255的方式可能存在某些隱患。應當
          將字符串轉換成WideString或UnicodeString,然后判斷字符碼是否在指定的
          字符集區域內,由此判斷各個字符的實際內容。 }
        //PrimaryIdentChars = ['a'..'z', 'A'..'Z', '_'];
        PrimaryIdentChars = ['a'..'z', 'A'..'Z', '_', #127..#255];
        IdentChars        = PrimaryIdentChars + Digits;

        //表達式類型
        NExprType: array[TExprType] of string =
            ('Object', 'String', 'DateTime', 'Float', 'Integer',
             'Enumerated', 'Boolean');
        //操作符類型
        NOperator: array[TOperator] of string =
            ( 'opNot',
              'opExp',
              'opMult', 'opDivide', 'opDiv', 'opMod', 'opAnd', 'opShl', 'opShr',
              'opPlus', 'opMinus', 'opOr', 'opXor',
              'opEq', 'opNEq', 'opLT', 'opGT', 'opLTE', 'opGTE');

        UnaryOperators       = [opNot];
        ExpOperator          = [opExp];
        MultiplyingOperators = [opMult, opDivide, opDiv, opMod, opAnd, opShl, opShr];
        AddingOperators      = [opPlus, opMinus, opOr, opXor];
        RelationalOperators  = [opEq, opNEq, opLT, opGT, opLTE, opGTE];

        NBoolean: array[boolean] of string[5] = ('FALSE', 'TRUE');

{-----------------------------------------------------------------------------
     >>>>  ResultType   <<<<  Begin
-----------------------------------------------------------------------------}
function ResultType( Operator : TOperator; OperandType : TExprType): TExprType;
        procedure NotAppropriate;
        begin
            Result:= ttString;
            raise EExpression.CreateFmt( '算符 %s 與算子 %s 類型不兼容',
                [NOperator[Operator], NExprType[OperandType]])
        end;
begin
        case OperandType of
            ttString:
                case Operator of
                    opPlus: Result     := ttString;
                    opEq..opGTE: Result:= ttBoolean;
                    else
                        NotAppropriate;
                end;
            ttFloat:
                case Operator of
                    opExp, opMult, opDivide, opPlus, opMinus: Result:= ttFloat;
                    opEq..opGTE: Result                             := ttBoolean;
                    else
                        NotAppropriate;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女与黑人做爰| 欧美三级三级三级| 国产精品你懂的在线欣赏| 精品一区二区三区影院在线午夜| 91精品国产综合久久小美女| 日韩中文字幕亚洲一区二区va在线 | 一本一道综合狠狠老| 亚洲女爱视频在线| 欧美日韩精品系列| 麻豆免费精品视频| 国产亚洲女人久久久久毛片| 99re热视频精品| 一区二区三区蜜桃网| 欧美日韩国产电影| 蜜臀av在线播放一区二区三区 | 国产精品一二三区| 国产精品美女久久久久久2018| 91在线一区二区| 午夜欧美2019年伦理| 精品免费国产二区三区| 国产69精品一区二区亚洲孕妇| 中文字幕一区二区三区精华液| 在线观看视频一区二区 | 中文字幕欧美激情一区| 日本韩国欧美在线| 奇米精品一区二区三区在线观看一 | 欧美久久一区二区| 国产精品资源站在线| 亚洲免费观看高清完整版在线观看 | 欧美性三三影院| 精品一区二区三区在线播放视频 | 欧美亚洲国产怡红院影院| 免费高清在线视频一区·| 国产精品你懂的在线欣赏| 欧美日韩另类国产亚洲欧美一级| 国产乱码精品1区2区3区| 一区二区三区在线免费视频| 欧美一区二区三区在线观看| 日本麻豆一区二区三区视频| av不卡一区二区三区| 欧美成人r级一区二区三区| 中文字幕日韩一区二区| 不卡在线视频中文字幕| 2021久久国产精品不只是精品| 亚洲精品你懂的| 一本大道久久精品懂色aⅴ| 欧美经典一区二区| 久久精工是国产品牌吗| 日韩电影免费在线| 欧美日韩国产一级二级| 懂色av一区二区三区免费观看 | 国产精品一区三区| 丝袜国产日韩另类美女| 亚洲四区在线观看| 国产亚洲精品资源在线26u| 91精品国产麻豆| 色天使色偷偷av一区二区| 国产一区二区不卡在线| 蜜桃视频第一区免费观看| 亚洲一卡二卡三卡四卡无卡久久| 国产精品久久久一本精品| 26uuu亚洲综合色| 日韩一区二区三区在线观看| 日本道色综合久久| av成人老司机| www.av精品| 粉嫩在线一区二区三区视频| 狠狠网亚洲精品| 日本大胆欧美人术艺术动态| 亚洲成人一区二区在线观看| 亚洲精选在线视频| 国产精品乱人伦中文| 久久精品日韩一区二区三区| 精品动漫一区二区三区在线观看| 欧美一级夜夜爽| 在线播放日韩导航| 91精品一区二区三区久久久久久| 欧美日韩精品专区| 欧美精品一级二级| 欧美午夜影院一区| 欧美高清你懂得| 欧美一区二区视频在线观看 | 成人av手机在线观看| 成人综合在线网站| 成人黄页毛片网站| av一二三不卡影片| 色综合色综合色综合| 在线观看91精品国产入口| 色婷婷综合久久久| 欧美日韩夫妻久久| 欧美一区2区视频在线观看| 日韩情涩欧美日韩视频| 欧美精品一区二区三区视频| 久久久亚洲高清| 国产精品三级在线观看| 国产精品国产三级国产a | 国产情人综合久久777777| 国产婷婷一区二区| 中文字幕一区二区三区色视频| 亚洲视频网在线直播| 亚洲美女精品一区| 图片区日韩欧美亚洲| 加勒比av一区二区| 成人深夜视频在线观看| 91国偷自产一区二区使用方法| 欧美日本韩国一区| 2020国产精品久久精品美国| 中文字幕不卡一区| 亚洲大片一区二区三区| 美女诱惑一区二区| 国产成人av网站| 欧洲精品中文字幕| 日韩免费观看高清完整版| 欧美激情中文不卡| 亚洲高清久久久| 国产精品69毛片高清亚洲| 色综合中文字幕国产| 欧洲精品在线观看| 国产亚洲精品bt天堂精选| 亚洲视频免费在线| 精品在线观看视频| 欧美在线观看视频在线| 精品欧美一区二区久久| 亚洲欧美福利一区二区| 日韩1区2区日韩1区2区| 丁香婷婷综合网| 制服丝袜中文字幕一区| 日本一区二区动态图| 偷偷要91色婷婷| eeuss国产一区二区三区| 91精选在线观看| 亚洲丝袜美腿综合| 黑人精品欧美一区二区蜜桃| 在线观看日韩毛片| 亚洲国产精品t66y| 日韩av在线播放中文字幕| 91同城在线观看| 国产欧美日韩在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 97久久超碰国产精品| 久久久精品tv| 久久国产免费看| 在线不卡一区二区| 亚洲一区二区三区四区在线| 成人国产免费视频| 久久这里只精品最新地址| 亚洲福利一区二区三区| 成人国产视频在线观看| 欧美大片在线观看| 有码一区二区三区| 国产精品亚洲人在线观看| 日韩欧美国产三级| 亚洲影视在线观看| 成人黄色大片在线观看| 国产1区2区3区精品美女| 日韩一区二区精品| 伊人性伊人情综合网| 国产成人精品免费网站| 91精品国产乱码久久蜜臀| 视频一区二区欧美| 一本到一区二区三区| 日本一区二区三区dvd视频在线| 亚洲影院在线观看| 欧美三区在线观看| 亚洲欧美日韩成人高清在线一区| 国产剧情av麻豆香蕉精品| 在线观看网站黄不卡| 亚洲最色的网站| 成人18精品视频| 国产亚洲欧美日韩日本| 午夜精品123| 日韩一区二区视频| 日韩和欧美一区二区三区| 在线观看视频91| 一区二区三区丝袜| 91亚洲精品一区二区乱码| 欧美一级日韩不卡播放免费| 亚洲一区二区视频| 成人国产精品视频| 国产调教视频一区| 国产超碰在线一区| 国产女主播一区| 成a人片国产精品| 亚洲婷婷国产精品电影人久久| 99re成人在线| 亚洲资源在线观看| 欧洲在线/亚洲| 最新日韩在线视频| 欧美三级一区二区| 午夜视频一区二区| 欧美日本一道本| 激情综合色综合久久综合| 精品久久久久99| 国内成人自拍视频| 日韩免费高清av| 成人黄色在线视频| 亚洲久本草在线中文字幕| 欧美日韩一区二区三区高清| 免费亚洲电影在线| 久久久精品国产免费观看同学|