⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ezexpryacc.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
         yyval := yyv[yysp-0];
       end;
   6 : begin
         FGroupIdent:= FGroupIdentList[FGroupIdentList.Count-1];
         FGroupIdentList.Delete(FGroupIdentList.Count-1);
         FIdentifier:= FIdentifierList[FIdentifierList.Count-1];
         FIdentifierList.Delete(FIdentifierList.Count-1);
         FTempParams:= GetParamList;

         IDF:=nil;
         if Assigned(FOnIdentifierFunction) then
         FOnIdentifierFunction(Self, FGroupIdent, FIdentifier, FTempParams, IDF);
         if IDF <> nil then
         begin
         if Length(FGroupIdent)=0 then
         AddExpression(IDF)
         else
         begin
         FExprList.Add(IDF);
         end;
         end else
         begin
         if CompareText(FIdentifier,'LTRIM')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfLTrim))
         else if CompareText(FIdentifier,'RTRIM')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfRTrim))
         else if CompareText(FIdentifier,'TRIM')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfTrim))
         else if CompareText(FIdentifier,'TRUNC')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfTrunc))
         else if CompareText(FIdentifier,'ROUND')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfRound))
         else if CompareText(FIdentifier,'ABS')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfAbs))
         else if CompareText(FIdentifier,'ARCTAN')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfArcTan))
         else if CompareText(FIdentifier,'COS')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfCos))
         else if CompareText(FIdentifier,'SIN')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfSin))
         else if CompareText(FIdentifier,'EXP')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfExp))
         else if CompareText(FIdentifier,'FRAC')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfFrac))
         else if CompareText(FIdentifier,'INT')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfInt))
         else if CompareText(FIdentifier,'LN')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfLn))
         else if CompareText(FIdentifier,'PI')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfPi))
         else if CompareText(FIdentifier,'SQR')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfSqr))
         else if CompareText(FIdentifier,'SQRT')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfSqrt))
         else if CompareText(FIdentifier,'POWER')=0 then
         IDF:= AddExpression(TMathExpression.Create(FTempParams, mfPower))
         else if CompareText(FIdentifier,'UPPER')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfUpper))
         else if CompareText(FIdentifier,'LOWER')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfLower))
         else if CompareText(FIdentifier,'COPY')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfCopy))
         else if CompareText(FIdentifier,'SUBSTRING')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfCopy))
         else if CompareText(FIdentifier,'POS')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfPos))
         else if CompareText(FIdentifier,'CHARINDEX')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfPos))
         else if CompareText(FIdentifier,'LENGTH')=0 then
         IDF:= AddExpression(TStringExpression.Create(FTempParams, sfLength))
         else if CompareText(FIdentifier,'LEFT')=0 then
         IDF:= AddExpression(TLeftExpr.Create(FTempParams))
         else if CompareText(FIdentifier,'RIGHT')=0 then
         IDF:= AddExpression(TRightExpr.Create(FTempParams))
         else if CompareText(FIdentifier,'YEAR')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkYear))
         else if CompareText(FIdentifier,'MONTH')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkMonth))
         else if CompareText(FIdentifier,'DAY')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkDay))
         else if CompareText(FIdentifier,'HOUR')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkHour))
         else if CompareText(FIdentifier,'MIN')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkMin))
         else if CompareText(FIdentifier,'SEC')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkSec))
         else if CompareText(FIdentifier,'MSEC')=0 then
         IDF:= AddExpression(TDecodeDateTimeExpr.Create(FTempParams, dkMSec))
         else if CompareText(FIdentifier,'FORMATDATETIME')=0 then
         IDF:= AddExpression(TFormatDateTimeExpr.Create(FTempParams))
         else if CompareText(FIdentifier,'FORMATFLOAT')=0 then
         IDF:= AddExpression(TFormatFloatExpr.Create(FTempParams))
         else if CompareText(FIdentifier,'FORMAT')=0 then
         IDF:= AddExpression(TFormatExpr.Create(FTempParams))
         else if CompareText(FIdentifier,'DECODE')=0 then
         IDF:= AddExpression(TDecodeExpr.Create(FTempParams))
         else if CompareText(FIdentifier,'MINOF')=0 then
         IDF:= AddExpression(TMinMaxOfExpr.Create(FTempParams, True))
         else if CompareText(FIdentifier,'MAXOF')=0 then
         IDF:= AddExpression(TMinMaxOfExpr.Create(FTempParams, False))
         else if CompareText(FIdentifier,'SQLLIKE')=0 then
         IDF:= AddExpression(TSQLLikeExpr.Create(FTempParams, False))
         else if CompareText(FIdentifier,'SQLNOTLIKE')=0 then
         IDF:= AddExpression(TSQLLikeExpr.Create(FTempParams, True))
         else if CompareText(FIdentifier,'ASCII')=0 then
         IDF:= AddExpression(TASCIIExpr.Create(FTempParams));
         end;
         if IDF= nil then
         begin
         FTempParams.Free;
         yyerror(Format('Unknown Identifier %s', [yyv[yysp-1].yystring]));
         yyabort;
         Exit;
         end;

       end;
   7 : begin
         AddExpression(TTypeCast.Create(ForceParamList(1), ttString));
       end;
   8 : begin
         AddExpression(TTypeCast.Create(GetParamList, ttFloat));
       end;
   9 : begin
         AddExpression(TTypeCast.Create(ForceParamList(1), ttFloat));
       end;
  10 : begin
         AddExpression(TTypeCast.Create(GetParamList, ttInteger));
       end;
  11 : begin
         AddExpression(TTypeCast.Create(ForceParamList(1), ttInteger));
       end;
  12 : begin
         AddExpression(TTypeCast.Create(GetParamList, ttBoolean));
       end;
  13 : begin
         AddExpression(TTypeCast.Create(ForceParamList(1), ttBoolean));
       end;
  14 : begin
         AddExpression(TConditional.Create(GetParamList));
       end;
  15 : begin
         AddExpression(TCaseWhenElseExpr.Create(FWhenParamList, FThenParamList, FElseExpr));
         FWhenParamList:= nil;
         FThenParamList:= nil;
         FElseExpr:= nil;

       end;
  16 : begin
         AddExpression( TBetweenExpr.Create(ForceParamList(3), FALSE) );
       end;
  17 : begin
         AddExpression( TBetweenExpr.Create(ForceParamList(3), TRUE) );
       end;
  18 : begin
         AddExpression( TSQLInPredicateExpr.Create(ForceParamList(FParamCount + 1), FALSE) );
       end;
  19 : begin
         AddExpression( TSQLInPredicateExpr.Create(ForceParamList(FParamCount + 1), TRUE) );
       end;
  20 : begin
         AddExpression(TSQLLikeExpr.Create(ForceParamList(3), FALSE));
       end;
  21 : begin
         AddExpression(TSQLLikeExpr.Create(ForceParamList(3), TRUE));
       end;
  22 : begin
         GetOneOperator;
         AddExpression(TUnaryOp.Create(opMinus, Op1));
         FIsComplex:= True;
       end;
  23 : begin
         GetOneOperator;
         AddExpression(TUnaryOp.Create(opPlus, Op1));
         FIsComplex:= True;
       end;
  24 : begin
         GetOneOperator;
         AddExpression(TUnaryOp.Create(opNot, Op1));
         FIsComplex:= True;
       end;
  25 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opPlus, Op1, Op2));
         FIsComplex:= True;
       end;
  26 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opMinus, Op1, Op2));
         FIsComplex:= True;
       end;
  27 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opMult, Op1, Op2));
         FIsComplex:= True;
       end;
  28 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opDivide, Op1, Op2));
         FIsComplex:= True;
       end;
  29 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opDiv, Op1, Op2));
         FIsComplex:= True;
       end;
  30 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opExp, Op1, Op2));
         FIsComplex:= True;
       end;
  31 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opMod, Op1, Op2));
         FIsComplex:= True;
       end;
  32 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opShl, Op1, Op2));
         FIsComplex:= True;
       end;
  33 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opShr, Op1, Op2));
         FIsComplex:= True;
       end;
  34 : begin
         GetTwoOperators;
         AddExpression(TRelationalOp.Create(opGTE, Op1, Op2));
         FIsComplex:= True;
       end;
  35 : begin
         GetTwoOperators;
         AddExpression(TRelationalOp.Create(opLTE, Op1, Op2));
         FIsComplex:= True;
       end;
  36 : begin
         GetTwoOperators;
         AddExpression(TRelationalOp.Create(opGT, Op1, Op2));
         FIsComplex:= True;
       end;
  37 : begin
         GetTwoOperators;
         AddExpression(TRelationalOp.Create(opLT, Op1, Op2));
         FIsComplex:= True;
       end;
  38 : begin
         GetTwoOperators;
         AddExpression(TRelationalOp.Create(opEQ, Op1, Op2));
         FIsComplex:= True;
       end;
  39 : begin
         GetTwoOperators;
         AddExpression(TRelationalOp.Create(opNEQ, Op1, Op2));
         FIsComplex:= True;
       end;
  40 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opAnd, Op1, Op2));
         FIsComplex:= True;
       end;
  41 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opOr, Op1, Op2));
         FIsComplex:= True;
       end;
  42 : begin
         GetTwoOperators;
         AddExpression(TBinaryOp.Create(opXOr, Op1, Op2));
         FIsComplex:= True;
       end;
  43 : begin
         FIsComplex:= True;
       end;
  44 : begin
         yyval := yyv[yysp-0];
       end;
  45 : begin
         FStackedParamCount.Add(Pointer(0));
       end;
  46 : begin
         yyval := yyv[yysp-1];
       end;
  47 : begin
         yyval := yyv[yysp-2];
       end;
  48 : begin
         FStackedParamCount.Add(Pointer(0));
       end;
  49 : begin
         AddParam;
       end;
  50 : begin
         AddParam;
       end;
  51 : begin
         yyval := yyv[yysp-3];
       end;
  52 : begin
         yyval := yyv[yysp-0];
       end;
  53 : begin
         yyval := yyv[yysp-1];
       end;
  54 : begin
         if FWhenParamList=nil then
         FWhenParamList:= TParameterList.Create;
         if FThenParamList=nil then
         FThenParamList:= TParameterList.Create;
         FWhenParamList.Add(FExprList[FExprList.Count-2]);
         FThenParamList.Add(FExprList[FExprList.Count-1]);
         FExprList.Delete(FExprList.Count-1);
         FExprList.Delete(FExprList.Count-1);

       end;
  55 : begin
       end;
  56 : begin
         FElseExpr:= TExpression(FExprList[FExprList.Count-1]);
         FExprList.Delete(FExprList.Count-1);

       end;
  57 : begin
         FGroupIdentList.Add('');
         FIdentifierList.Add(UpperCase(yyv[yysp-0].yystring));

       end;
  58 : begin
         FGroupIdentList.Add(UpperCase(yyv[yysp-2].yystring));
         FIdentifierList.Add(UpperCase(yyv[yysp-0].yystring));

       end;
  59 : begin
         Val(yyv[yysp-0].yystring, IntVal, Code);
         if Code=0 then
         FExprList.Add(TIntegerLiteral.Create(StrToInt(yyv[yysp-0].yystring)))
         else
         FExprList.Add(TFloatLiteral.Create(StrToFloat(yyv[yysp-0].yystring)));

       end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -