Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Формальная семантика goto и неструктурных программ

Оператор goto не изменяет пользовательские переменные. В реальности goto изменяет системную переменную, счетчик команд, содержащую указатель (метку, имя, адрес) следующего в порядке выполнения оператора.

В терминах блок-схем goto – это просто стрелка.

Такая семантика даёт возможность точно определить семантику произвольных блок-схем. Пусть блок-схема B содержит n блоков S1,…,Sn. Неявно мы ввели нумерацию блоков (вместо индексов подошли бы любые иные указатели). Наша задача: построить структурную блок-схему, функционально эквивалентную данной.

Procedure StrucruredB ();

var BlockName: tBlockName; {указатель на выполняемый блок}

bool:boolean;{значение текущего условного блока}

BlockEnd:tBlockName;{ещё один указатель на блок}

{этих переменных нет в исходной блок-схеме}

begin

BlockName:=cFirstBlockName;{указатель на кружок «Н»}

while BlockName<>cLastBlockName {указатель на кружок «К»}do

begin

{Разбор случаев – для каждого операторного блока два случая}

BlockName=ThisBlock: SThisBlock;

BlockName:=ThisBlockEnd;

BlockName=ThisBlockName: BlockName:=NextBlockName;

{метка оператора следующего блока}

{С каждым условным блоком связываем 3 случая}

BlockName=ThisBlock: Bool:=BThisBlock;

BlockName:=ThisBlockEnd;

BlockName=ThisBlockEnd and Bool=true: BlockName:=PlusBlockName;

{метка на блок, на который указывает стрелка + }

BlockName=ThisBlockName and Bool=false: BlockName:=MinusBlockName;

end;

end;

Данная программа пошагово эквивалентна исходной.

Наши рассуждения фактически доказывают более сильные утверждения:

1) Любая программа может быть записана с единственным циклом и единственным разбором случаев. Такая форма программы называется нормальной.

2) Этот переход можно осуществить алгоритмически – написать интерпретатор блок-схем, который по произвольной блок-схеме (для него – входные данные) исполняет алгоритм, описанный этой блок-схемой.

Procedure Structure(B:tFlowChart);

Упражнение *. Сделай это!;)

В теории программирования этот результат называется теоремой об универсальной функции (теоремой о существовании компьютера).

Каковы же минимальные средства программирования? Сколько операторов, типов данных, переменных и так далее должен содержать язык программирования, чтобы на нём можно было написать любую программу?

Для прояснения этого вопроса создадим искусственный машинный язык с «паскалеобразным» синтаксисом.

 

<== предыдущая лекция | следующая лекция ==>
Создание новых структурных операторов | Мини-Паскаль
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 351; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.