КАТЕГОРИИ: Архитектура-(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; Просмотров: 373; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |