📄 ezexpryacc.pas
字号:
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 + -