Программа реализации конечного автомата, распознающего целое число
Материал из Вики ИТ мехмата ЮФУ
Версия от 20:38, 12 февраля 2011; Admin (обсуждение | вклад) (Новая страница: «=====Программа с таблицей переходов===== <source lang="Delphi"> // Реализация конечного автомата таблице…»)
Программа с таблицей переходов
// Реализация конечного автомата таблицей
// Beg - начальное состояние
// A - после знака
// B - после цифры
// En - конечное состояние
// Err - состояние ошибки
// Digit - встречена цифра
// Sign - встречен знак
// Eoln - встречен конец ввода
// Unknown - встречен неизвестный символ
type
States = (Beg,A,B,En,Err);
KindCh = (Digit, Sign, Eoln, Unknown);
function Kind(ch: char): KindCh;
begin
case ch of
'0'..'9': Result := Digit;
'+','-': Result := Sign;
#13,#10: Result := Eoln;
else Result := Unknown;
end;
end;
var P: array [Beg..B,Digit..Unknown] of States :=
((B, A, Err, Err),
(B, Err, Err, Err),
(B, Err, En, Err));
procedure error();
begin
writeln('error');
halt;
end;
var
ch: Char;
State: States := Beg;
begin
read(ch);
while (State<>En) and (State<>Err) do
begin
writeln(State);
State := P[State,Kind(ch)];
read(ch);
end;
writeln(State);
end.
Программа с заменой таблицы переходов условными операторами
// Вместо таблицы - условные операторы
procedure error();
begin
writeln('error');
halt;
end;
var ch: Char;
begin
var s: string := '';
read(ch);
while not (ch=#13) do
begin
if ch in ['+','-'] then
begin
// A
s += ch;
// end A
read(ch);
if ch in ['0'..'9'] then
begin
// B
s += ch;
// end B
read(ch)
end
else error;
end
else if ch in ['0'..'9'] then
begin
// B
s += ch;
// end B
read(ch)
end
else error;
end;
writeln('Распознано число: ',s);
end.