Реферат: Синтаксический разбор строк и конечные автоматы

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, в зависимости от того, каких скобок не хватает.

К-во Просмотров: 452
Бесплатно скачать Реферат: Синтаксический разбор строк и конечные автоматы