[<Separator> <Digit> {<Digit>}]
[<Exponent> [<Sign>] <Digit> {<Digit>}]
<Digit> ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
<Sign> ::= '+' | '-'
<Separator> ::= '.'
<Exponent> ::= 'E' | 'e'
ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ IsNumber, ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ True, Π΅ΡΠ»ΠΈ ΡΡΠ° ΡΡΡΠΎΠΊΠ° ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π·Π°ΠΏΠΈΡΠΈ ΡΠΈΡΠ»Π°, ΠΈ False, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ (Π»ΠΈΡΡΠΈΠ½Π³ 4.2).
ΠΠΈΡΡΠΈΠ½Π³ 4.2. Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ <Digit>
function IsDigit(Ch: Char): Boolean;
begin
Result := Ch in ['0'..'9'];
end;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ <Sign>
function IsSign(Ch: Char): Boolean;
begin
Result := (Ch = '+') or (Ch = '-');
end;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ <Separator>
function IsSeparator(Ch: Char): Boolean;
begin
Result := Ch='.';
end;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ <Exponent>
function IsExponent(Ch: Char): Boolean;
begin
Result := (Ch = 'E') or (Ch = 'e');
end;
function IsNumber(const S: string): Boolean;
var
P: Integer; // ΠΠΎΠΌΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ
begin
Result := False;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» β ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°
// Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΠ»ΠΎΠΌ
if Length(S) = 0 then Exit;
// ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°
Π := 1;
// ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» β <Sign>, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ
if IsSign(S[Π ]) then Inc(Π );
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΡΠΎΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° ΡΠΈΡΡΠ°
if (Π > Length(S)) or not IsDigit(S[Π ]) then Exit;
// ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ
// ΠΈΠ»ΠΈ Π½Π΅ Π²ΡΡΡΠ΅ΡΠΈΠΌ Π½Π΅ ΡΠΈΡΡΡ
repeat
Inc(Π );
until (Π > Length(S)) or not IsDigit(S[Π ]);
// ΠΡΠ»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ β ΡΠΈΡΠ»ΠΎ.
// Π½Π΅ ΠΈΠΌΠ΅ΡΡΠ΅Π΅ Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΡ
if Π > Length(S) then
begin
Result := True;
Exit;
end;
// ΠΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΈΠΌΠ²ΠΎΠ» β <Separator>, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ
// ΡΡΠΎΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° ΡΠΈΡΡΠ°
if IsSeparator(S[P]) then
begin
Inc(P);
if (P > Length(S)) or not IsDigit(S[P]) then Exit;
repeat
Inc(P);
until (P > Length(S)) or not IsDigit(S[P]);
// ΠΡΠ»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ β ΡΠΈΡΠ»ΠΎ
// Π±Π΅Π· ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΡ
if Π > Length(S) then
begin
Result := True;
Exit;
end;
end;
// ΠΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» β <Exponent>, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ
// ΡΡΠΎΠΈΡ Π²ΡΠ΅ ΡΠΎ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ
if IsExponent(S[Π ]) then
begin
Inc(P);
if P > Length(S) then Exit;
if IsSign(S[P]) then Inc(P);
if (P > Length(S)) or not IsDigit(S[P]) then Exit;
repeat
Inc(P);
until (P > Length(S)) or not IsDigit(S[P]);
if P > Length(S) then
begin
Result := True;
Exit;
end;
end;
// ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΠ»ΠΎ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°, Π·Π½Π°ΡΠΈΡ, Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π»ΠΈΡΡ
// Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
// ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ, ΡΠ°ΠΊΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ
// ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ.
end;
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π΅ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΌΡ Π²Π²Π΅Π»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ°Π·Π±ΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΠ°ΠΌΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ β <Number> β ΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°. Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π»Π΅Π²ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ. ΠΠ΅Π²ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ, Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌ β ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π° ΠΏΠΎΡΠΎΠΌ β ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ. Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π½Π°, Ρ. ΠΊ. Π½Π°ΡΠ° Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Π½ΠΎ ΠΌΡ Ρ ΡΡΠΈΠΌ ΡΡΠΎΠ»ΠΊΠ½Π΅ΠΌΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ .
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ IsNumber ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ΅ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ IsNumberSample.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΠΈΡΠΈ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° β Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ (ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π³ΡΠ°ΡΠΎΠΌ, ΠΈΠ»ΠΈ ΡΠ΅Π»ΡΡΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠΎΠΉ). ΠΡΠΎ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π³ΡΠ°Ρ, ΡΠ·Π»Π°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ (ΠΊΡΡΠ³ΠΈ) ΠΈ Π½Π΅ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ (ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ) ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΠ²ΠΈΠ³Π°ΡΡΡΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π»ΠΈΠ½ΠΈΡΠΌ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ , ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΡΠ΅Π»ΠΊΠ°ΠΌΠΈ. Π ΡΠ°ΠΊΠΎΠΌ Π³ΡΠ°ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, Π° ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΎΠ½ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ ΠΠΠ€. ΠΠ° ΡΠΈΡ. 4.1 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π·Π°ΠΏΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π»ΡΡΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ.
Π ΠΈΡ. 4.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π»ΡΡΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° "Π¦ΠΈΡΡΠ°", ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π½Π° ΡΠΈΡ. 4.1.
4.4. ΠΡΠΎΡΡΠΎΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, Ρ. Π΅. ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π° Π²ΡΡ ΠΎΠ΄Π΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ ΠΈ Π·Π½Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΈ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π° ΠΏΠΎΡΠΎΠΌ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡ ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΡΠΈΡΠ΅Π», ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠΎΡΡ Π·Π½Π°ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ ΡΡΠΈΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. Π Π²ΡΡΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΏΠΈΡΠ΅ΠΌ ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠΠ€ ΠΈ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° <Number>.
<Expr> ::= <Number> {<Operation> <Number>}
<Operation> ::= '+' | '-' | '*' | '/'
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅Π Π½Π°ΡΠ΅ΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΡΠΎΠ±Π΅Π», Ρ.Π΅. Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ "2 + 2", Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ "2+2", Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π΄Π°Π½Π½ΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅. Π ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ ΠΏΡΠΎΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΉ (ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π²) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΠΉ ΡΡΡΠΈΠ½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π±Π΅Π· Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΈ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².
ΠΠ»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π΄Π²Π΅ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ β IsOperator, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, ΠΈ Expr, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄Π΅ ΡΡΡΠΎΠΊΡ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π΅Π΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ IsNumber ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π°ΠΌ ΡΠΎΠΆΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Π° β ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π° Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡ Number, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄Π΅ ΡΡΡΠΎΠΊΡ ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ ΡΠΈΡΠ»ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ°ΠΊ Π»ΠΈ ΡΡΠΎ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ Number Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠΈΡΠ»Π° ΡΠΈΠΌΠ²ΠΎΠ» ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ Expr, Π²ΡΠ·Π²Π°Π²ΡΠ°Ρ Number, ΠΌΠΎΠ³Π»Π° ΡΠ·Π½Π°ΡΡ, Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π°Π½Π°Π»ΠΈΠ·. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΡ Number Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ESyntaxError, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ Π² Π·Π°ΠΏΠΈΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π‘Π°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π·Π°Π΄Π°ΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Π² Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Π°, ΠΈ ΡΡΠΎΠ±Ρ Π½Π΅ ΠΎΡΠ²Π»Π΅ΠΊΠ°ΡΡΡΡ Π½Π° Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ StrToFloat ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ SysUtils. ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Number Π²ΡΠ΄Π΅Π»ΠΈΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ²Π»ΡΡΡΡΡΡΡ ΡΠΈΡΠ»ΠΎΠΌ, ΡΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ StrToFloat, ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΎΠ½Π°. ΠΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠ΅ΡΡΡ Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π² Π½Π°ΡΠ΅ΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ ΡΠ΅Π»ΠΎΠΉ ΠΈ Π΄ΡΠΎΠ±Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΊΠ°, a StrToFloat ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Ρ.Π΅. ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠ°Ρ. Π§ΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ»Π΅Π³ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ IsSeparator Π½Π΅ Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ".", Π° Ρ DecimalSeparator (ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Ρ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ ΡΠΎΠΆΠ΅ ΡΡΠ°Π½Π΅Ρ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ). ΠΠΎ-Π²ΡΠΎΡΡΡ , Π½Π΅ Π²ΡΡΠΊΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π½Π°ΡΠ΅ΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅, Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ StrToFloat, Ρ.ΠΊ. ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠΈΠΏΠ° Extended. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ "2Π΅5000" Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ EConvertError, Ρ.ΠΊ. Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ ΠΎΡΡΠ°Π΅ΠΌΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠΈΠΏΠ° Extended, ΠΌΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΌΠΈΡΠΈΡΡΡΡ Ρ ΡΡΠΈΠΌ.
ΠΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.3.