А   Б  В  Г  Д  Е  Є  Ж  З  І  Ї  Й  К  Л  М  Н  О  П  Р  С  Т  У  Ф  Х  Ц  Ч  Ш  Щ  Ю  Я 


Вкладений блок

Вкладені блоки а й ft введені для динамічного розподілу пам'яті, завдяки чому кожному з масивів х і у відводиться один і той же ділянку пам'яті.

Вкладені блоки в мовах, подібних Алгола, дають оригінальний, хоча і не дужепрактичний, спосіб контролю за більшим числом ідентифікаторів (1.014 identifier), оскільки вони є локальними по відношенню до того внутрішньому рівню вкладень, на якому описано.

Якщо у вкладеному блоці якийсь ідентифікатор зовнішнього блоку перевизначений (тобтооголошений заново), то в цьому вкладеному блоці видно тільки перевизначення ідентифікатор. Наприклад, якщо у зовнішньому блоці оголошена змінна In, а потім у вкладеному блоці змінна In оголошена повторно, то ця нова локальна змінна не має нічого спільного із зовнішньоюзмінної. У вкладеному блоці, де змінна оголошена повторно, видно тільки ця нова змінна. А в зовнішньому блоці видна тільки зовнішня змінна.

Дія цих режимів поширюється на всі вкладені блоки, якщо в них ці режими не змінені явно.

Вмові Паскаль не допускається використання вкладених блоків, що є вельми серйозним обмеженням при написанні програм будь-якого скільки-небудь серйозного розміру. Основним результатом цього є те, що опису різних об'єктів дуже часто виявляютьсярозташованими далеко від місць їх використання, що серйозно порушує один із сучасних принципів програмування - локальність. З цим же пов'язана проблема, яка полягає в тому, що керуюча змінна оператора циклу повинна бути описана в охоплюватиме блоці, щодозволяє використовувати її значення після завершення виконання відповідного оператора циклу. Більш вдалим рішенням представляється можливість опису керуючої змінної оператора циклу в самому операторі циклу, що робить дану керуючу зміннулокальної по відношенню до даного оператору циклу.

Піддамся-ректіви трансляції по умові ігноруються у вкладених блоках, якщо умова зовнішнього блоку не виконано.

Виняток передається в стек викликів для кожного вкладеного блоку. У міру проходження стекавикликаються деструктори для локальних об'єктів, в результаті чого ці об'єкти руйнуються.

Оператор case реалізує виконання одного з декількох вкладених блоків (операторів) в залежності від значення умовного виразу.

Тому якщо ви хочете такожобробити виняток, то зазвичай використовуються вкладені блоки try. Внутрішній блок зв'язується з виразом finally, а зовнішній - з except, або навпаки, залежно від ситуації.

Вхідними даними для нього служать відтранслювати з вихідного мови рядок і таблиця імен зурахуванням вкладених блоків. Так як ЦП працює з мовою високого рівня, а саме з об'єктної рядком зворотної польської записи, то він використовує для операндів стек магазинного типу. Тобто при вибірці даних здійснюється прохід по всьому непрямим посиланнях до точки, вякої знаходиться адреса пам'яті, і потім пряме посилання поміщається в стек. Цей процес продовжується до тих пір, поки в об'єктній рядку не зустрінеться оператор. Кожен оператор бере одну або дві (одномісний або двомісний оператор) записи з верхівки стека, виробляєобробку і результат (и) поміщає в стек.

Нагадаємо, що оператор ON діє тільки на ті оператори обмережує ON-оператор блоку (і вкладених блоків), які виконуються після виконання даного оператора ON, але до виконання наступного оператора ON. Це даєможливість для помилок, що виникають в різних блоках або різних місцях одного і того ж блоку, задавати друк різних змінних.

Приклад активізації та закінчення блоків. Оператор GO TO може також припиняти виконання декількох активних блоків шляхом передачіуправління з групи вкладених блоків або із зовнішнього процедури, яка була викликана. Оператор GO TO повинен передати управління на блок, який є активним. Як тільки наведена на рис. 6.2 програма почне виконуватися, головна процедура (А) активізується ізалишається активною протягом усього часу виконання програми. При виконанні оператора CALL G викликається і стає активною процедура G. Коли виконується оператор END G, процедура G закінчується, і управління передається на наступний оператор процедури А, якийактивізує блок BEGIN В. Оператор CALL З активізує процедуру С, яка в свою чергу активізує процедуру D. Тепер всі блоки А, В, С і D активні.

Якщо у вкладеному блоці якийсь ідентифікатор зовнішнього блоку перевизначений (тобто оголошений заново), то в цьому вкладеномублоці видно тільки перевизначення ідентифікатор. Наприклад, якщо у зовнішньому блоці оголошена змінна In, а потім у вкладеному блоці змінна In оголошена повторно, то ця нова локальна змінна не має нічого спільного із зовнішньою змінною. У вкладеному блоці, дезмінна оголошена повторно, видно тільки ця нова змінна. А в зовнішньому блоці видна тільки зовнішня змінна.

У разі блоків PROCEDURE і BEGIN ситуація переривання надає дію на всі оператори аж до оператора END, включаючи всі вкладені блоки. Навикликаються процедури, що лежать поза блоком, вплив ситуації переривання, зазначеної перед цим блоком, не поширюється.

У наведеному прикладі областю дії опису вставки /XI є вся програма, тому вона може бути використана і у вкладенихблоках. Областю дії описів вставок /У /і /Z /є блоки, в яких вони безпосередньо описані, і тому можуть бути використані тільки в цих блоках.

Отже, в програмі, написаній на АЛГОЛ-60 процедури, якщо вони є, входять до неї на правах описівстаршого або вкладених блоків. У ФОPТPАні ж і в ПЛ /1 вводиться поняття програмної одиниці - самостійної частини програми, роль якої можуть грати головна програма, підпрограма-функція і підпрограма загального вигляду. При трансляції в ДОС /ЄС кожна програмнаодиниця перетвориться в окремий об'єктний (або переміщуваний) модуль (див. нижче, гл. В ПЛ /1 обидва ці види підпрограм називаються процедурами або процедурними блоками.

В якості ON-одиниці можна використовувати Непомічені простий оператор (крім DECLARE, FORMAT, DO , RETURN) абоНепомічені звичайний блок, який може містити вкладені блоки та процедури.

Область дії змінних визначається за правилом, аналогічному іншим мовам програмування з блочною структурою, -; змінні локальні в блоці, де описані, а також у всіхвкладених блоках, якщо в них вони не описані повторно.

Цей блок містить вкладені блоки.

Ключове слово Given двічі використано в рядку без подальших Find або Minerr. Mathcad не допускає вкладені блоки розв'язання рівнянь, хоча можна визначити функції через блокирішення рівнянь і потім використовувати їх в інших блоках розв'язання рівнянь.

В основу синтаксису Алгола покладено принцип блочної організації структури програми, організації, яка вперше була введена в цій мові. Програма складається з вкладених блоків.Визначення підпрограми зустрічаються як опису всередині блоків, і в свою чергу складаються з вкладених блоків. Важливість такої організації для управління середовищем посилань вже докладно обговорювалася. Синтаксично блокова структура робить більш ясною структуру програми. Ввідміну від Фортрану, де всередині окремої програми не можуть бути виділені, крім інструкцій, ніякі підструктури, структура Алгола допускає багаторівневу організацію всередині програми.

Якщо в ньому були вкладені блоки, які необхідно змінити, такожрозчленувати їх.

Область дії префікс-ситуації, зазначеної перед операторами PROCEDURE або BEGIN, поширюється на всі оператори блоку. Вона включає також всі вкладені блоки. Дія префікс-ситуації не поширюється тільки на процедури, що лежать поза блоком,які можуть бути викликані з даного блоку. Тому і передбачається можливість ставити префікс-ситуацію перед оператором CALL при виклику цих процедур.

Алгоритмічний мова Яуза побудований на базі АЛ ГОЛ 60 з оусской транскрипцією службових слів. Програмаоформляється як процедура без вкладених блоків. Програмний блок починається з опису всіх локальних змінних, застосованих у програмі з тими ж характеристиками, що я в автокодом. Глобальні змінні вважаються оголошеними у - всій програмі - спеціалізованоїЕОМ. У мові застосовуються засоби, що дозволяють задавати розташування змінних і масивів в одному і то.

Поняття блокової структури, яке ми знаходимо в мовах з блочною структурою, таких, як Алгол і ПЛ /I, заслуговує спеціального розгляду. У мовах з блочноюструктурою кожна програма або підпрограма організована у вигляді безлічі вкладених блоків, зазвичай обмежених символами begin і end, як в Алгол. На рис. 6.1 схематично показана структура типовою Алгол-програми.

Якщо у вкладеному блоці якийсь ідентифікаторзовнішнього блоку перевизначений (тобто оголошений заново), то в цьому вкладеному блоці видно тільки перевизначення ідентифікатор. Наприклад, якщо у зовнішньому блоці оголошена змінна In, а потім у вкладеному блоці змінна In оголошена повторно, то ця нова локальназмінна не має нічого спільного із зовнішньою змінною. У вкладеному блоці, де змінна оголошена повторно, видно тільки ця нова змінна. А в зовнішньому блоці видна тільки зовнішня змінна.

Використання в іншому модулі пропозиції uses, що включає модуль, вінтерфейсної частини якого оголошено деякий елемент, включає тим самим нову область його видимості вже в іншому модулі. Коли в реченні uses перераховується кілька модулів, то області видимості визначаються так само, як у випадку вкладених блоків. При цьому першийз перерахованих модулів аналогічний самому зовнішньому блоку, а останній - самому внутрішньому.

Співвіднесення з кожної синтаксично правильної ланцюжком дерева граматичного розбору - вельми важливий момент, оскільки це дозволяє підкріпити багато програм свогороду інтуїтивної семантичною структурою. Так, наприклад, НФБ-граматика для Алгол визначає структуру алгольной програми у вигляді послідовності описів і операторів із вкладеними блоками. На самому нижньому рівні навіть ідентифікатори і числа розкладаються на своїскладові частини. Вивчаючи граматику Алгол, програміст отримує можливість глибше зрозуміти різні структури, з яких складаються правильні програми. Важливо відзначити, що граматика не обов'язково визначає ту структуру, яку можна було б очікувати дляданого елемента програми. Одні й ту ж мову можна визначити різними граматиками, що легко зрозуміти, зробивши деякі маніпуляції з граматикою рис. 9.2. Так, на рис. 9.4 наводиться граматика, визначальна ту ж мову, що і граматика рис. 9.2 зауважте, однак, щоструктури, що вводяться цієї нової граматикою не мають нічого спільного зі структурами, які хотілося б ввести інтуїтивно.

При виникненні виключення в блоці try потік управління пропускає кілька блоків коду. Він залишає try і пропускає блоки, вкладені в нього, атакож функції, що викликаються з блоку try, і вкладені блоки. Отже, механізм обробки виключень повинен забезпечити видалення всіх автоматичних змінних, автоматичних об'єктів або параметрів функції, оголошених в будь-якому з цих блоків. Згадайте:автоматичні змінні і об'єкти, як і параметри, знищуються при виході з області видимості, тобто коли управління виходить з блоку, в якому вони оголошені.

У наведеному нижче прикладі виключення генерується оператором throw, що знаходиться в блоці try.Оператор throw також розміщується в тілі функції, що викликається в блоці try, але управління як і раніше перестрибує в приєднаний блок catch (якщо тільки throw не знаходиться всередині вкладеного блоку try), як буде описано в наступному розділі.

Якщо у вкладеному блоці якийсьідентифікатор зовнішнього блоку перевизначений (тобто оголошений заново), то в цьому вкладеному блоці видно тільки перевизначення ідентифікатор. Наприклад, якщо у зовнішньому блоці оголошена змінна In, а потім у вкладеному блоці змінна In оголошена повторно, то ця новалокальна змінна не має нічого спільного із зовнішньою змінною. У вкладеному блоці, де змінна оголошена повторно, видно тільки ця нова змінна. А в зовнішньому блоці видна тільки зовнішня змінна.

Оскільки блок - це окремий випадок оператора, то,згідно синтаксису, блоки можуть бути вкладені один в одний. Об'єкти, описані в кожному блоці, можуть вживатися тільки всередині нього і стають недоступними при виході з цього блоку. Тому локальні об'єкти вкладеного блоку недоступні в зовнішньому блоці. Щостосується описів із зовнішнього блоку, то їх дія, як правило, поширюється і на внутрішній блок; зокрема, у внутрішньому блоці можна вживати всі ті ж змінні, що й у зовнішньому блоці.

Наступною важливою особливістю мови є коштизображення структур і засоби роботи зі структурами. Не намагаючись дати формального визначення структури, можна на кількох прикладах пояснити, що вона позначає. Наприклад, система вкладених блоків програми являє собою структуру, і її характер може бутипредставлений системою відкритих та закритих дужок.

Мови програмування використовує певні правила, пов'язані з оформленням програми. Більшість з них не впливає на її виконання, але значно спрощує сприйняття програми і пошук помилок. Одним з такихправил є відступ вкладеного блоку по відношенню до зовнішнього. У прикладі для кнопкової форми, наведеному вище, всі оператори між початком і кінцем процедури зміщені вліво на одну позицію табуляції, а оператори вкладених блоків (таких як For

Блок-схемаумовного оператора. Блоком в мові АЛГОЛ-60 називається один або кілька операторів, укладених в операторні дужки begin і end, якщо відразу після begin слід опис змінних. Змінні, описані після begin, вважаються локалізованими в даному блоці. Один блок можевключати в себе кілька вкладених блоків.

Програма main викликає функцію Func, генеруючу виняток. При появі виключення потік управління входить в два блоки try, не виконуючи ні один з них. Таким чином, виключення генерується в контексті двох динамічновкладених блоків. Динамічне вкладення try залежить від дійсної послідовності викликів функцій перед виникненням виключення.

Клас високорівневих мов, в яких програма складається з блоків, у тому числі вкладених; вкладення може повторюватися іздійснюватися на будь-яку глибину. Блок програми складається з послідовності операторів та блоків, якій передують оголошення змінних. Змінні, оголошені в головній частині блоку, помітні по всьому блоку і будь-яким вкладеним блокам, якщо, звичайно, змінна зтим же самим ім'ям не оголошується в головній частині внутрішнього блоку. У цьому випадку нове оголошення діє по всьому внутрішньому блоку, причому зовнішнє оголошення знову починає діяти в кінці внутрішнього блоку. У таких ситуаціях прийнято говорити, щозмінні мають вкладені області дії. Поняття блокова стонктноа було введено в процесі створення сімейства мов Алгол (А. Algol), тому мови з блокової структурою іноді називають алголоподобнимі.

В основу синтаксису Алгола покладено принцип блочноїорганізації структури програми, організації, яка вперше була введена в цій мові. Програма складається з вкладених блоків. Визначення підпрограми зустрічаються як опису всередині блоків, і в свою чергу складаються з вкладених блоків. Важливість такої організації дляуправління середовищем посилань вже докладно обговорювалася. Синтаксично блокова структура робить більш ясною структуру програми. На відміну від Фортрану, де всередині окремої програми не можуть бути виділені, крім інструкцій, ніякі підструктури, структура Алгола допускаєбагаторівневу організацію всередині програми.

Область існування мітки, як і інших об'єктів тов програми, визначається за правилами, викладеним вище. Зазвичай немає необхідності в явному описі міток. Воно потрібне тільки в тому випадку, якщо неявне описпризводить до помилок в програмі, що має вкладені блоки.

У кожній мові програмування існують свої, правила визначення областей активності і областей існування асоціацій. Зміна середовища посилань ifpo - виходить при передачі управління підпрограмі,поверненні управління з підпрограми, при вході і виході з блоку. Поняття блоку, блокової структури одержало широке поширення і використовується в багатьох мовах: серед них Алгол-60 PL-1 Паскаль, Симула та ін У мовах з блочною структурою програмний модуль (головнийпрограма або підпрограма) представляється набором вкладених блоків.

Оголошення пов'язує для певних частин програми ідентифікатори з атрибутами. Сама програма і визначення будь-якої процедури називаються блоками. Оскільки визначення процедур такожє операторами, блоки можуть вкладатися один в іншій. Вкладений блок є підлеглим по відношенню до містить його блоку. Включає екстента блоку служить список операторів, що утворюють його тіло, включаючи підлеглі блоки. Виключає екстента блокує список операторів, що утворюють його тіло, без підлеглих блоків. Діапазон оголошення в виключає екстента дорівнює включающему екстент даного блоку. В виключає екстента блоку ідентифікатор може мати не більше одного оголошення.

У даній програміописуються дві цілі змінні x, z і функція-процедура func e одним цілим аргументом у, що виробляє ціле значення. Остання в функції-процедурі не описується і є для неї глобальної змінної. Після описів йдуть виконувані оператори: присвоювання цілоїзмінної х значення, виклик функції-процедури func і друк її значення. Виконання вкладеного блоку включає створення нової змінної і зв'язування її з ідентифікатором х, привласнення змінної цілого значення, виклик функції func і друк її значення.

При вході вперший блок-створюються дані - ції круглі змінні і речовинний масив. Виконуються операції іменування даних: ідентифікатори х, у асоціюються з цілими змінними, ідентифікатор А асоціюється з речовим масивом. Ці асоціації робляться активними. Потімпослідовно виконуються оператори блоку: оператори присвоювання, перший вкладений блок, оператор друку, другий вкладений блок.

Область виразів служить для виконання арифметичних і логічних операцій. Після її виконання операнди будуть видалені зстека, а в го вершині залишиться результат. У процесорі є також спеціальний реєстр, в якому зберігається число дозволених для використання в даний момент базових регістрів. Таким чином, виключається можливість випадкового доступу до логічно недоступним об'єктам вкладених блоків.

Правила локалізації об'єктів у мові програмування Паскаль дуже схожі на правила Алгол-60. Кажуть, що ідентифікатори і мітки є локальними по відношенню до того блоку, на початку якого вони описані. Це означає, що вони існують тільки в даному блоці, а поза його вони не доступні. Ідентифікатори і мітки, описані в блоці, представляє собою програму, доступні у всіх вкладених блоках і називаються глобальними. Вони існують скрізь у програмі.

При вході в перший блок-створюються дані - ції круглі змінні і речовинний масив. Виконуються операції іменування даних: ідентифікатори х, у асоціюються з цілими змінними, ідентифікатор А асоціюється з речовим масивом. Ці асоціації робляться активними. Потім послідовно виконуються оператори блоку: оператори присвоювання, перший вкладений блок, оператор друку, другий вкладений блок.

При виникненні виняткової ситуації програма шукає обробник catch наступним чином: виконується пошук відповідного блоку catch, пов'язаного з самим внутрішнім блоком try. Програма шукає блоки catch в порядку їх визначення та активізує перший блок, що співпадає за типом виключення або визначений з трьома крапками. Якщо відповідний блок catch не знайдений або код всередині активізованого catch сам генерує виняток, то програма шукає блоки catch, пов'язані з наступним вкладеним блоком try.

Мови програмування використовує певні правила, пов'язані з оформленням програми. Більшість з них не впливає на її виконання, але значно спрощує сприйняття програми і пошук помилок. Одним з таких правил є відступ вкладеного блоку по відношенню до зовнішнього. У прикладі для кнопкової форми, наведеному вище, всі оператори між початком і кінцем процедури зміщені вліво на одну позицію табуляції, а оператори вкладених блоків (таких як For

Це знадобиться для зміни блоку, після чого можна перевизначити блок, як було описано раніше в цій главі. Об'єкти вибирають до або після виконання команди розчленування. Якщо блок розчленовується на вкладені блоки, то в цьому випадку розчленовується тільки блок верхнього рівня. Щоб розчленувати блок наступного рівня, необхідно використовувати команду розчленування повторно.