📄 up10build.pas
字号:
FloatNumber: ParserFloat;
fsort: TToken;
VariableID: integer;
begin
Result := false;
i := 0;
j := length(s);
repeat
while i <> j do
begin
inc(i);
if s[i] = '-' then
break;
end;
if (i > 1) and (i < j) then
begin
s1 := copy(s, 1, i-1);
s2 := copy(s, i+1, j-i);
Result := CheckNumberBrackets(s1) and CheckNumberBrackets(s2);
if Result then
begin
Result := CheckVariable(s1, VariableID) or CheckNumber(s1, FloatNumber);
{$IFNDEF Win32}
new(s3);
new(s4);
try
{$ENDIF}
if not Result then
begin
Result := CheckBracket(s1, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s1 := s3{$IFNDEF Win32}^{$ENDIF};
end;
if not Result then
Result := CheckNegate(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckSubtract(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckMultiply(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
if Result then
begin
Result := CheckVariable(s2, VariableID) or CheckNumber(s2, FloatNumber);
if not Result then
begin
Result := CheckBracket(s2, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s2 := s3{$IFNDEF Win32}^{$ENDIF}
else
Result := CheckMultiply(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s2, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
end;
end;
{$IFNDEF Win32}
finally
dispose(s3);
dispose(s4);
end;
{$ENDIF}
end;
end
else
break;
until Result;
end;
function CheckMultiply(const s: string; var s1, s2: string): boolean;
{checks whether '*' is the primary TOperation in s}
var
s3, s4: TermString;
i, j: integer;
FloatNumber: ParserFloat;
fsort: TToken;
VariableID: integer;
begin
Result := false;
i := 0;
j := length(s);
repeat
while i <> j do
begin
inc(i);
if s[i] = '*' then
break;
end;
if (i > 1) and (i < j) then
begin
s1 := copy(s, 1, i-1);
s2 := copy(s, i+1, j-i);
Result := CheckNumberBrackets(s1) and CheckNumberBrackets(s2);
if Result then
begin
Result := CheckVariable(s1, VariableID) or
CheckNumber(s1, FloatNumber);
{$IFNDEF Win32}
new(s3);
new(s4);
try
{$ENDIF}
if not Result then
begin
Result := CheckBracket(s1, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s1 := s3{$IFNDEF Win32}^{$ENDIF};
end;
if not Result then
Result := CheckNegate(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
if Result then
begin
Result := CheckVariable(s2, VariableID) or
CheckNumber(s2, FloatNumber);
if not Result then
begin
Result := CheckBracket(s2, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s2 := s3{$IFNDEF Win32}^{$ENDIF}
else
Result := CheckMultiply(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s2, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
end;
end;
{$IFNDEF Win32}
finally
dispose(s3);
dispose(s4);
end;
{$ENDIF}
end;
end
else
break;
until Result;
end;
function CheckIntegerDiv(const s: string; var s1, s2: string): boolean;
{checks whether 'DIV' is the primary TOperation in s}
var
s3, s4: TermString;
i, j: integer;
VariableID: integer;
FloatNumber: ParserFloat;
fsort: TToken;
begin
Result := false;
i := 0;
repeat
j := pos('DIV', copy(s, i+1, length(s)-i));
if j > 0 then
begin
inc(i, j);
if (i > 1) and (i < length(s)) then
begin
s1 := copy(s, 1, i-1);
s2 := copy(s, i+3, length(s)-i-2);
Result := CheckNumberBrackets(s1) and CheckNumberBrackets(s2);
if Result then
begin
Result := CheckVariable(s1, VariableID) or
CheckNumber(s1, FloatNumber);
{$IFNDEF Win32}
new(s3);
new(s4);
try
{$ENDIF}
if not Result then
begin
Result := CheckBracket(s1, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s1 := s3{$IFNDEF Win32}^{$ENDIF};
end;
if not Result then
Result := CheckNegate(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
if Result then
begin
Result := CheckVariable(s2,VariableID) or
CheckNumber(s2,FloatNumber);
if not Result then
begin
Result := CheckBracket(s2, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s2 := s3{$IFNDEF Win32}^{$ENDIF}
else
Result := CheckPower(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s2, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
end;
end;
{$IFNDEF Win32}
finally
dispose(s3);
dispose(s4);
end;
{$ENDIF}
end;
end;
end;
until Result or (j = 0) or (i >= length(s));
end;
function CheckModulo(const s: string; var s1, s2: string): boolean;
{checks whether 'MOD' is the primary TOperation in s}
var
s3, s4: TermString;
i, j: integer;
VariableID: integer;
FloatNumber: ParserFloat;
fsort: TToken;
begin
Result := false;
i := 0;
repeat
j := pos('MOD', copy(s, i+1, length(s)-i));
if j > 0 then
begin
inc(i, j);
if (i > 1) and (i < length(s)) then
begin
s1 := copy(s, 1, i-1);
s2 := copy(s, i+3, length(s)-i-2);
Result := CheckNumberBrackets(s1) and CheckNumberBrackets(s2);
if Result then
begin
Result := CheckVariable(s1, VariableID) or
CheckNumber(s1, FloatNumber);
{$IFNDEF Win32}
new(s3);
new(s4);
try
{$ENDIF}
if not Result then
begin
Result := CheckBracket(s1, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s1 := s3{$IFNDEF Win32}^{$ENDIF};
end;
if not Result then
Result := CheckNegate(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
if Result then
begin
Result := CheckVariable(s2, VariableID) or
CheckNumber(s2, FloatNumber);
if not Result then
begin
Result := CheckBracket(s2, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s2 := s3{$IFNDEF Win32}^{$ENDIF}
else
Result := CheckPower(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s2, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s2, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
end
end;
{$IFNDEF Win32}
finally
dispose(s3);
dispose(s4);
end;
{$ENDIF}
end;
end;
end;
until Result or (j = 0) or (i >= length(s));
end;
function CheckRealDivision(const s: string; var s1, s2: string): boolean;
{checks whether '/' is the primary TOperation in s}
var
s3, s4: TermString;
i, j: integer;
VariableID: integer;
FloatNumber: ParserFloat;
fsort: TToken;
begin
Result := false;
i := 0;
j := length(s);
repeat
while i <> j do
begin
inc(i);
if s[i] = '/' then
break;
end;
if (i > 1) and (i < j) then
begin
s1 := copy(s, 1, i-1);
s2 := copy(s, i+1, j-i);
Result := CheckNumberBrackets(s1) and CheckNumberBrackets(s2);
if Result then
begin
Result := CheckVariable(s1, VariableID) or
CheckNumber(s1, FloatNumber);
{$IFNDEF Win32}
new(s3);
new(s4);
try
{$ENDIF}
if not Result then
begin
Result := CheckBracket(s1, s3{$IFNDEF Win32}^{$ENDIF});
if Result then
s1 := s3{$IFNDEF Win32}^{$ENDIF};
end;
if not Result then
Result := CheckNegate(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckIntegerDiv(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckModulo(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckRealDivision(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}) or
CheckPower(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF}, fsort) or
CheckFuncOneVar(s1, s3{$IFNDEF Win32}^{$ENDIF}) or
CheckFuncTwoVar(s1, s3{$IFNDEF Win32}^{$ENDIF}, s4{$IFNDEF Win32}^{$ENDIF});
if Result then
begin
Result := CheckVariable(s2, VariableID) or
CheckNumber(s2, FloatNumber);
if not Result then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -