Реферат: Синтаксический разбор строк и конечные автоматы
case S[i] of
'0'..'9' : State := InDigit;
'-' : State := InOp;
'(' : Inc(ParCount);
' ' : ;
else
begin
Result := i;
Exit;
end;
end;
InRPrnt:
case S[i] of
'+', '-', '*', '/' : State := InOp;
')' : Dec(ParCount);
' ' : ;
else
begin
Result := i;
Exit;
end;
end;
end; // case State of
if State in [InLPrnt, InOp] then //Недопустимыесостояния
Result := Length(S);
if ParCount > 0 then Result := resRPrntMissing else
if ParCount < 0 then Result := resLPrntMissing;
end;
Входное математическое выражение может содержать целочисленные константы, символы арифметических операций и скобки. Между символами операций, скобками и числами допустимо любое количество пробелов. Функция CheckMath возвращает значение 0, если переданное ей выражение не содержит ошибок. Если выражение содержит ошибку, функция возвращает положительное число, соответствующее позиции символа, в которой была обнаружена ошибка. Если число открытых скобок не равно числу закрытых, функция возвращает либо -1, либо -2, в зависимости от того, каких скобок не хватает.