Формулировка задачи: Программа читает текстовый файл, выделяет слова и распознает идентификаторы. Имя текстового файла запрашивается. На экран выдается список слов по одному слову в строку, идентификаторы помечаются символом *. Разделителем не является признак конца строки.
Спецификации (типы данных и структуры данных):
Определяются три состояния чтения текста:
· ident – подозрение на идентификатор,
· news – начало чтения нового слова,
· ordin – читаемое слово не идентификатор.
Состояния объединены в перечислимый тип status.
chars – множество всех символов, letter, digit и separ - подмножества букв, цифр и разделителей слов, соответственно.
Процедуры и функции - нет.
Алгоритм:Чтение (из файла) посимвольно. Определяется изменение состояния в зависимости от состояния s и вновь прочитанного символа c. Начальное состояние - news.
Входной алфавит V – буква, цифра, разделитель, символ.
Алфавит состояний Q – News, Ident, Ordin.
Функция переходов f:Q´V®Q:
буква
цифра
разделитель
символ
News
Ident
Ordin
News
Ordin
Ident
Ident
Ident
News
Ordin
Ordin
Ordin
Ordin
News
Ordin
Начальное состояние – News
Множество заключительных состояний – {}
{Symplest scaner}
program Symplest_Scanner;
{Программа читает текстовый файл,
выделяет слова и распознает идентификаторы}
type
status=(ordin,ident,news);
chars=set of char;
var
letter,digit,separ:chars;
anytxt:string;
s:status;
i:integer;
c:char;
F:text;
begin
letter:=['A'..'Z','a'..'z'];
digit :=['0'..'9'];
separ :=[' '];
repeat
writeln(' Введите имя обрабатываемого файла');
readln(anytxt);
assign(F,anytxt);
{$I-} reset(F); {$I+}
i:=IOResult;
if i<>0 then
writeln(' Ошибочка ',i:3,' , попробуйте еще раз');