Інтерпретація блок-схем
Вхідні програма то, можливо підготовлена різними зовнішніх пристроях й у удобочитаемости може мати неповні рядки — і інші індивідуальні особливості. З іншого боку, слова вхідного мови зазвичай мають різний формат, наприклад ідентифікатори, складаються з різного числа літер, числа — з різного числа цифр. Тому на згадуваній першому етапі трансляції здійснюється лексичний аналіз, котра перебувала… Читати ще >
Інтерпретація блок-схем (реферат, курсова, диплом, контрольна)
Томський державний университет.
Факультет прикладної математики кибернетики.
Кафедра программирования.
ДОПУСТИТИ До ЗАХИСТІ У ДАК зав. кафедрою програмування професор, д.т.н.
_______________ А. Ю. Матросова.
«____ «________________ 1999 г.
Соловйов Олександр Станиславович.
Система візуального программирования.
«Блок-схема» з урахуванням мови блок-схем.
(дипломна работа).
Науковий керівник доцент, к.т.н.
_________ Н. А. Белоусова.
Автор работы.
_________ О. С. Соловьев.
Томськ 1999.
Реферат.
Дипломна робота є систему програмування, яка полегшує навчання програмування і засадам алгоритмізації. Основна ідея, покладена основою роботи, — це створення трансляції з мови блок — схем.
Створена система «Блок-схема» має зручним інтерфейсом, графічним редактором блок-схем, вбудованим текстовим редактором, інтерпретатором і конвертором мовою програмування Сі. У системі передбачена можливість отримання (довідок) як і справу самої системі, і про мову блок — схем. Система оснащена демонстраційними примерами.
Система створена двох вариантах:
. Під операційну систему MS-DOS 3. x і выше;
. Під операційні системи Windiows 95, Windows 98 і Windows NT. У першому випадку, розробка велася з допомогою мови Borland З++ 3.1 (сумісна із мовою Turbo З 2.0). У другому, з допомогою пакета Borland C++Builder 3.0.
Оглавление Введение 4 1. Мови програмування 6 1.1. Класифікація 6 1.2. Порівняльна характеристика мов. 8 2. Трансляторы 9 2.1. Класифікація 9 2.2. Компілятори і інтерпретатори 9 3. Мова блок-схем 11 3.1. Правила побудови блок-схем 11 3.2. Блоки 12 3.3. Зв’язки 14 3.4. Мова наповнення блок — схем 14 4. Система програмування 18 4.1. Графічний редактор 18 4.2. Вмонтований текстовий редактор 21 4.3. Інтерпретатор 22.
4.3.1. Етапи трансляції 22.
4.3.2. Лексичний аналіз 24.
4.3.2.1. Завдання лексичного аналізу 24.
4.3.2.2. Сканер 25.
4.3.3. Синтаксичний і семантичний аналіз 27.
4.3.4. Польська инверсная запис (ПолИЗ) 27.
4.3.4.1. Алгоритм Дейкстры формування ПолИЗа 28.
4.3.4.2. ПолИЗ висловів, містять перемінні синтаксису 29.
4.3.4.3. Алгоритм перекладу ПолИЗа в машинні команди 31.
4.3.5. Загальна схема роботи інтерпретатора 34 4.4. Оболонка системи 35.
4.4.1. Фундаментальна обізнаність із файлами 35.
4.4.2. Ознайомлення з системою 36.
4.4.2.1. MS-Dos версія системи 36.
4.4.2.2. Windows версія системи 40 4.5. Внутрішнє уявлення даних 46 Укладання 48 Література 49 Додаток 50 Додаток 1: Приклади блок-схем 50 Додаток 2: Матриці переходів аналізаторів 52 Додаток 3: Текст основних класів програми 58.
Основна проблема, яка постає перед обучаемыми під час занять по інформатики, це невідчутність досліджуваного предмета. Живучи у матеріальному світі людині досить складно не дуже цікаво розбиратися зі неосязаемыми операторами.
Найбільш природною формою уявлення (сприйняття) інформації є графічний образ — малюнок, креслення, схема тощо. До в цій формі людина вдається щоразу (можливо неявно собі), коли необхідно вирішувати (описувати, формулювати) справді складні завдання. Ефективне оперування наочними образами, швидке встановлення значеннєвий зв’язку з-поміж них — є сильною стороною людського мышления.
Ще за часів становлення програмування, коли програми писалися на внутрішньому мові ЕОМ — машинному коді (ассемблері), невід'ємною частиною розробки програм було використання блок-схем. Як усе гаразд знаємо: «Схемою алгоритму називається таке графічне уявлення алгоритму, в якому етапи процесу обробки інформації та носії інформації представлені у вигляді геометричних символів з заданого обмеженого набору, а послідовність процесу відбито напрямом ліній «[1]. Їх застосування значно полегшувало сприйняття і аналіз програми. Двовимірне уявлення програми ясніше відбивало її структуру. Застосування блоксхем дозволяло швидше, і якісніше розробляти і налагоджувати програми, і навіть полегшувалося їх супровід. Дане властивість блок-схем було «узаконене» і вони почали обов’язкової частиною документации.
Збереження двох різної форми уявлення програм — самого тексту і блок-схемы небезпечне помилками, бо дуже важко постійно підтримувати відповідність. Понад те, чимало програмістів будь-коли любили викреслювати блок-схемы і створювали їх кількість після того, як програма була завершено, лише тому, що блок-схемы були потрібні як документації. Отже, користь, яку міг би принести блок-схемы, була відсутня і тоді, коли вона була найбільш потрібна — при розробці программы.
Природним розвитком даній ситуації є об'єднання двох підходів описання програм: як тексту і блок-схемы. Результатом такого об'єднання є поняття візуального програмування. Під ним розуміється спосіб описи алгоритму виконання завдання в графічному вигляді, який би з'єднав гідності тексту і блок-схем програм. Що у поєднані із сучасними графічними можливостями ЕОМ та його здатністю прийняти рутинні операції, і максимально спростити весь процес програмування, робить цей напрям дуже перспективным.
У результаті всього вище сказаного, цікавить реалізація системи візуального програмування, у межах якої, звучатимуть можливість визначення алгоритму в графічному вигляді, подібно блок-схеме, але із елементами потокового програмування та використанням повною мірою графічних і інтерактивних можливостей комп’ютера, що в результаті як полегшує розуміння написаного, а й сильно полегшує процес створення программ.
Обучаемый значно швидше й легше розбереться що не або мові, якщо йому дати можливість самому скласти блок-схему алгоритму, подивитися як він (алгоритм) виконуватиметься, простежити зміни значень змінних, та був подивитися, що таке вихідний текст безпосередньо на досліджуваному языке.
У 70ых роках були досить успішні спроби створення систем, з допомогою яких ЕОМ розуміла мову блок-схем (наприклад, ОДА). Та все ж що це мови блок-схем над чистому вигляді. Вони були присутні описатели, з допомогою яких ЕОМ будувала з алгоритму блок-схему.
У ідеальному разі програміст має блок-схему, безпосередньо працюючи з планшетом, у якому змальовується блок-схема.
Якщо орієнтувати розроблювану систему на початківця програміста, який як програмування, скільки засадам алгоритмізації, то система мусить бути інтерпретуючого типу з зручним інтерфейсом. Це отже, що інтерпретації повинен відображатись на екрані у вигляді, що дозволяє користувачеві ознайомитися з цим процесом, переривати його, спостерігати, як змінюються значення переменных.
1. Мови программирования.
1.1. Классификация.
У системному програмуванні мовою називається певний набір символів і керував (угод), які визначають способи комбінацій цих символів для записи осмислених повідомлень (текстов).
Розрізняють, власне кажучи, нестрого, природні мови, у яких говорять і пишуть в повсякденні, і штучні мови, створювані декому приватних целей.
Штучні мови, призначені для записи програм, називаються мовами програмування. Кожна ЕОМ має власний мову програмування — мову команд чи машинний язик, і може виконувати програми, написані лише з етой мовє. У машинному мові кожної команді відповідає певна операція, яке може виконувати машина. Проте на машинному мові програмувати важко через надмірної деталізації програми. Тому на ЕОМ першого і другого покоління підвищення продуктивність праці програмістів почали застосовувати мови програмування, не збігаються з машинними мовами. На ЕОМ третього покоління машинний мову мало застосовується для програмування завдань, його збереглася лише роль внутрішнього мови ЭВМ.
Нині налічується кілька сотень різних мов програмування, які класифікуються з різних ознаками. Найбільш загальної є класифікація за рівнем залежності мови від ЕОМ. У цій ознакою мови діляться на великі группы:
. Машинно-зависимые языки,.
. Машинно-независимые языки.
Машинно-зависимые мови, своєю чергою, ділять на машинні і машинноориентированные.
Машинно-ориентированные мови іноді називають автокодами. Розрізняють два рівня машинно-ориентированных мов. До першого рівню ставляться мови символьного кодування, інакше звані мнемокодами, а до другого — макроязыки.
Мнемокод відрізняється від машинного мови відповідної ЕОМ заміною цифрових кодів операцій буквенными (мнемонічними), а цифрових адрес операндов — буквенными чи буквенно-цифровыми. При перекладі нормальною мовою ЕОМ кожна команда мнемокода замінюється відповідної командою машинного мови (>).
Застосування мнемокода дозволяє автоматизувати роботу програміста по розподілу пам’яті, точніше, по присвоюванню істинних адрес. Це особливо корисно при програмуванні для машин зі змінним форматом команд. З іншого боку, мнемокод істотно полегшує роботу з складання великих програм, коли окремі сегменти (модулі) програми складаються різними програмістами і об'єднують у єдину програму на етапі загрузки.
Мова другого рівня — макромова — поруч із символічними аналогами машинних команд, із яких складається мнемокод, передбачає також використання макрокоманд, які мають прямих аналогів в машинному мові. При трансляції кожна макрокоманда замінюється групою команд машинного мови (>). Застосування макрокоманд скорочує програму, підвищує продуктивність програміста. Програміст, використовує машинноорієнтований мову має бути добре знайомим особливостям устрою машини, на яку складається программа.
Машинно-независимые мови також діляться на дві групи з ступеня деталізації програми. До першої групи ставляться процедурноориентированнные мови, а до другої проблемно-ориентированные.
Процедурно-ориентированные мови призначені для описи алгоритмів (процедур) вирішення завдань, тому їхнє співчуття також називають алгоритмічними, хоча поняття алгоритмічного мови не збігаються з поняттям мови програмування. Якщо запис на алгоритмическом мові безпосередня, придатна для входження у ЕОМ і перетворення на готову робочу програму, то така «мова є одночасно мовою програмування. Деякі алгоритмічні мови, слід сказати, є мовами програмування, а то й додати до них спеціальних коштів. Зокрема, алгоритмічний мову Алгол-60 стає мовою програмування після включення до нього операторів введення та виведення і конкретизації способів виконання деяких інших операцій управління устаткуванням ЭВМ.
Програма на процедурно-ориентированном мові майже залежить від конкретної ЕОМ, де вирішуватиметься завдання. Слово «майже» слід розуміти тому, що у вона найчастіше програми рішення однієї й тієї ж завдання до різних ЕОМ відрізняються лише деякими непринциповими деталями зовнішнього оформлення, які за переході від ЕОМ до ЕОМ замінюються механически.
Структура процедурно-ориентированных мов ближчі один до природному мови, наприклад російському чи англійської, ніж до рідної мови ЕОМ. Тому переклад з процедурно-ориентированного мови на машинний мову здійснюється за принципу «кілька днів у кілька». Інакше кажучи, здебільшого тут можна встановити відповідність лише між групою елементарних конструкцій мови та групою команд ЕОМ, аналогічно, як із перекладі з англійської російською мовою групи слів і навіть групи пропозицій заміняють групою слів іншою мовою. Пословный переклад не возможен.
До проблемно-ориентированным мовам відносять звані непроцедурные мови, тобто таких мови, які вимагають докладної записи алгоритму виконання завдання. Користувач має лише вказати формулювання завдання або назвати послідовність завдань раніше підготовленого набору, вказати вихідні дані і необхідну форму видачі результатів. Цю інформацію використовується спеціальної програмою — генератором для генерування робочої программы.
Стосовно транслятору все згадувані вище мови, крім машинних мов, є вхідними. У процесі трансляції програма на вхідному мові перекладається певний внутрішній мову, зручніший для подальшої роботи транслятора, та був послідовно відбувається кілька стадій обробки. В кожній стадії що транслюється програма представляється в деякому проміжному мові. І, нарешті, після обробки транслятором виходить програма на вихідному языке.
1.2. Порівняльна характеристика языков.
Машинно-ориентированные мови універсальні у тій ступеня, у якій універсальний мову машини, що у них утримуватися кошти програмування і рішення на ЕОМ будь-яких завдань, із якими ЕОМ може впоратися за своїми технічними можливостям. При програмуванні цих мовами можна врахувати особливості системи команд та внутрішнього облаштування ЕОМ, що дозволяє створювати високоякісні програми. Проте машинноорієнтовані мови досить важкі з вивчення, а програмувати на них трудно.
Машинно-независимые мови ефективні тільки до певного класу завдань. Поза тим класу завдань застосування більшості мов високого рівня малоефективно і взагалі непридатне. Ці мови порівняно легко вивчати. Програмування ними значно простіше, ніж машинно-ориентированных языках.
Слід зазначити, у середовищі мов програмування спостерігається процес зближення мов за своїми можливостями. Наприклад, Фортран доповнився операціями над строковыми і символічними даними, всяке нововведення в Сі повторюється в Паскале і т.п.
2. Трансляторы.
2.1. Классификация.
Будь-яку програму, яка переводить довільний текст на деякому вхідному мові до тексту іншою мовою, називають транслятором. Зокрема, вихідним текстом то, можливо вхідні програма. Транслятор переводить їх у вихідну чи об'єктну программу.
Що стосується цього визначення найпростішим транслятором вважатимуться, завантажник, який переводить програму умовних адреси, оформлену в вигляді модуля завантаження, в об'єктну програму абсолютних адреси. У цьому вся разі вхідний мову (мову завантажника) і об'єктний мову (мову ЕОМ) є мовами рівня. Проте частіше вхідний і об'єктний мови ставляться до різним рівням. Зазвичай рівень вхідного мови вище рівня об'єктного языка.
За рівнем вхідного мови трансляторы заведено поділяти на ассемблеры, макроассемблеры, компілятори, генераторы.
Вхідним мовою ассемблера є мнемокод, макроассемблера — макромова, компілятора — процедурно-ориентированный мову, а генератора — проблемно — орієнтований мову. У зв’язку з цим вхідний мову називають по типу транслятора: мову ассемблера, мову макроассемблера і т.д.
Програма, отримана після обробки транслятором, або безпосередньо виповнюється на ЕОМ, або піддається обробці іншим транслятором.
2.2. Компілятори і интерпретаторы.
Зазвичай процеси трансляції і виконання програми розділені у часі. Спочатку вся програма транслюється, і потім виповнюється. Трансляторы, працюють у такому режимі, називають трансляторами компилирующего типу. Якщо вхідним мовою такого транслятора є процедурно-ориентированный мову високого рівня, то транслятор називають компилятором.
Існують трансляторы, у яких трансляція і виконання суміщені у часу, їх називають інтерпретаторами. До складу інтерпретатора входить блок аналізу, розпізнає оператори вхідного мови, набір підпрограм, відповідних різним операторам, та Блок, управляючий всією роботою интерпретатора.
По вказівкам управляючого блоку, блок аналізу переглядає оператори вхідний програми, розпізнає їх тип яких і визначає можливість негайного виконання. Інформації про можливості виконання оператора передається управляючому блоку, що викликає відповідну підпрограму, виконують дії, запропоновані оператором.
Інтерпретатори часто застосовують у ролі отладочных і діалогових трансляторів, які забезпечують роботу користувача з машиною в діалоговому режимі з дистанційного термінала. З іншого боку, інтерпретатори використовують виспівати (інтерпретації) на ЕОМ програм, складених іншої ЕОМ, інколи ж як останнього блоку транслятора компилирующего типу. У разі транслятор і двох частин: першої - компілятора, переводящего програму на проміжний мову, що є вхідним мовою інтерпретатора; другий — інтерпретатора, виконуючого програму на проміжному языке.
У такій схемою компілятор можна зробити дуже простим. Інтерпретатор дещо спрощена компілятора, оскільки негайне виконання розпізнаних операторів вхідного мови робить непотрібним дії, пов’язані з компоновкой об'єктної програми, оформленням їх у єдиний модуль завантаження або у вигляді кількох модулів, якщо вона велика.
Недолік інтерпретатора залежить від неефективне використання машинного часу. Наприклад, і під час циклічних програм, сам і хоча б оператор доводиться інтерпретувати багаторазово. За умови повторного виконанні програми, інтерпретацію доводиться виконувати наново, тоді як транслятор компилирующего типу дозволяє виконати трансляцію одного разу, та був зберігати програму машинних кодах. За наведеною причини інтерпретатори застосовуються щодо редко.
3. Мова блок-схем.
Нині величезне поширення отримала тенденція до візуалізації процесу програмування. Отже, створення транслятора з мови блок-схем є логічним продовженням розвитку технології програмування. З іншого боку, мову блок-схем незамінний у початковій стадії навчання программированию.
Таку мову є неформальним описом алгоритму, він має підвищеної наочністю і обозримостью. Мова блок-схем використовується при розробці системного математичного і інформаційного забезпечення, а також за описі процесів функціонування окремих блоків чи устройств.
«Схемою алгоритму називається таке графічне уявлення алгоритму, у якому етапи процесу обробки інформації та носії інформації представлені у вигляді геометричних символів з заданого обмеженого набору, а послідовність процесу відбито напрямом ліній «[1].
Наведена у цій роботі система трансляції з мови блок-схем входять такі подзадачи:
По-перше, попри досить багато графічних і текстових редакторів (наприклад: Page Maker, Corel Draw, Word тощо.) нужны:
1. Свій графічний редактор, оскільки настроювання на внутрішні формати файлів цих систем до неефективного використанню ресурсов.
ЕОМ, Тому необхідний ефективний, графічний редактор, орієнтований лише з об'єкти типу блоков.
2. Текстовий редактор, працював у графічному режимі для редагування тексту всередині блоков.
По-друге, крім редакторів (графічного і текстового) необхідно створити інтерпретатор, бо в його основі можна легко створити систему налагодження алгоритмов.
Як мовилося раніше вище в кожного транслятора є своя вхідний мову. У цьому системі вхідний мову транслятора і двох языков:
1. Мова блок-схем («Графічний» язык),.
2. Мова функціонального наповнення блок-схем.
Нижче наводиться приклад блок-схемы, реалізує вибір найбільшого числа з цих двох чисел. На малюнку 1 наводиться приклад блок схеми пошуку максимального з цих двох значений.
3.1. Правила побудови блок-схем.
Блок-схема алгоритму описує якийсь процес чи, краще сказано, послідовність дій. Звідси випливає, що вона повинна мати початок і поклала край. Особливо слід зазначити, що початок (блок початку програми) може лише один, а виходів (блок кінця програми) несколько.
Кожен символу, з яких будується блок-схема (далі будемо називати блоки), своя функціональна навантаження. Відповідно до ній блоки повинні заповнюватися текстом.
Блоки в блок-схеме алгоритму з'єднуються стрілками відповідно до послідовністю дій, які реалізують цей алгоритм.
Необхідно дотримуватися послідовності блоків в зв’язках, як мультиветвление і безумовний перехід. Про ці особливостях ми поговоримо в параграфі 3.3.
Мал.1. Приклад блок — схеми алгоритму перебування максимального з цих двох значений.
3.2. Блоки.
Блок це мінімальна одиниця інтерпретації у мові блок-схем. Як було вказано вище, з блоків будується блок-схема алгоритму. Усі вони відрізняються як графічним зображенням, а й діями, виконуваними під час виконання кожного блока.
У таблиці 1 наведено перелік блоків для побудови блок-схем алгоритмів. таблиця 1. |Графічний символ действия|Идентификатор |Найменування дії | | | | | | | | | | |BEGIN |блок початку програми | | | | | | |END |блок кінця програми | | | |блок автоматичних | | |AD |дій | | | | | | |PP |Блок виклику підпрограми| | | | | | |IF |блок умовного переходу | | | | | | |INPUT |блок введення даних | | | | | | |OUTPUT |блок виведення даних | | | | | | |CASE |блок гілка | | | | | | |SWITCH |блок мультиветвления | | | | | | |LABEL |мітка | | | | | | |GOTO |Безумовний перехід на | | | |мітку |.
Розглянемо функціональне призначення кожного блока.
«ПОЧАТОК» З цієї блоку починається виконання блок-схемы. Присутність цього блоку обов’язково. Слід зазначити, що блок «ПОЧАТОК» у нього схемою може бути один.
«КІНЕЦЬ» Потому, як обробляється цього блоку, виконання блок-схемы завершується. Присутність цього блоку також обов’язково, та на відміну від попереднього, блоків «КІНЕЦЬ» то, можливо несколько.
«АВТОМАТИЧНІ ДІЇ» Присутність цього блоку, як й коштовності всіх наступних блоків, у схемі необов’язково. У блоці дій можуть виконуватися: будь-які математичні дії, відповідно до правил математики; стандартні функції, надані системою «Блок-схема»; ініціалізація переменных.
«ПІДПРОГРАМА» У цьому вся блоці відбувається виклик підпрограми, яку становив сам пользователь.
«ГАЛУЖЕННЯ ПО УМОВІ» У цьому вся блоці перевіряється заданий умова на істинність. І, залежно від результату здійснюється ветвление.
«ВВЕДЕННЯ / ВИСНОВОК» З допомогою цих блоків організується інтерфейс користувача з виконуваної схемою, тобто вводиться й виводиться информация.
«МІТКА» Позначає позицію блоку, який відбувається і у час виконання зв’язки «БП». У цьому вся блоці вказується відповідна мітка. Цей блок є частиною зв’язки — «БП».
«БЕЗУМОВНИЙ ПЕРЕХІД НА МІТКУ» У цьому вся блоці вказується мітка, на яку відбуватися перехід. Цей блок є частиною зв’язки — «БП».
Використання цих двох блоків необов’язково. Ці блоки запроважено з з підвищення наочності блок-схем, позаяк у результаті введення цих блоків, зайвими вказувати складні сполуки блоків (зникає загромождённость схеми стрелками).
«МУЛЬТИВЕТВЛЕНИЕ» У цьому вся блоці перебуває змінна, через яку буде відбуватися мультиветвление. Блок «мультиветвление» є частиною зв’язки під аналогічною назвою (опис зв’язок дивіться далее).
«ГІЛКА» Блок «гілка» є частиною зв’язки «мультиветвление». У блоці «гілка» задається константа, з якою виконується порівняння значення, отриманого у блоці «мультиветвление.».
3.3. Связки.
Зв’язка — це такий послідовність блоків у ньогосхемою, якої необхідно дотримуватись під час створення блок-схемы алгоритма.
Мова блок-схем має лише двома связками:
. «БП» — безумовний переход;
. «Мультиветвление» — мультиветвление.
«БП» — є низку з двох блоків: «БЕЗУМОВНИЙ ПЕРЕХІД НА МІТКУ» і «МІТКА». Вхідні у зв’язку блоки повинні містити те ж метку.
«МУЛЬТИВЕТВЛЕНИЕ» є низку з послідовності блоків, яка починається з блоку «мультиветвление». Далі йде послідовність блоків «гілка». Закінчується дана зв’язка тоді, коли зустрічається блок відмінний від блоку «ветвь».
3.4. Мова наповнення блок — схем.
У цьому параграфі ми розглянемо, як слід заповнювати текстом блоки в запропонованої версії мови блок-схем. У основу цієї мови покладено два мови: З (його спрощеному варіанту); Pascal (його спрощений вариант).
«ПОЧАТОК» З цією блоком пов’язується опис змінних. Змінні описуються так: тип змінна 1, змінна 2, …, змінна N; тип змінна N+1, …; Безліч типів у мові блок схем обмежена: int — ціле; long_int — довше ціле; float — речовинне; char — символьне. Ім'я перемінної - стандартний ідентифікатор імені цього у мові З, Pascal. Довжина імені не ограничена.
«КІНЕЦЬ» Вміст цього блоку не просматривается.
«АВТОМАТИЧНІ ДІЇ» Тут задаються висловлювання, споруджувані з змінних, констант, математичних знаків, математичних і стандартних функций:
+ сложение,.
— вычитание,.
* умножение,.
/ деление,.
= присвоєння, sin синус, co косинус, tg тангенс, ctg котангенс, arcsin арксинус, arccos арккосинус, arсtg арктангенс, arcctg арккотангенс, ln натуральний логарифм, lg десятковий логарифм, abs абсолютне значення числа (модуль), exp функція експоненти, mod взяття цілої частини під час ділення, divx взяття дробової частини при делении,.
^ спорудження до рівня, sqrt перебування квадратного кореня, sh гіперболічний синус, ch гіперболічний косинус, th гіперболічний тангенс, і навіть, стандартні функції, надані системою «Блок-схема »: randomize () ініціалізація датчика випадкових чисел, random () отримання випадкового числа, clock () отримання часу, getch () отримання коду натиснутої клавіші, kbhit () отримання значення була натиснута клавіша, strlen () отримання довжини рядки, тощо. Список функцій поповнюватиметься (повний перелік дивіться при застосуванні). Пріоритет операцій відповідає пріоритетам мов Pascal і З (пріоритети операцій дивіться при застосуванні). Передбачено можливість змінювати пріоритети з допомогою круглих скобок. Кожне вираз має закінчуватися символом «;» Например:
«ГАЛУЖЕННЯ ПО УМОВІ» Текст цього блоку має бути собою логічне умова, після якого ставиться «(». Умова може містити логічні зв’язки І - &&, АБО — ||, НЕ — !. Например:
«ВВЕДЕННЯ» У цьому вся блоці через кому вказуються перемінні значення які вводить сам програміст з термінала. Після перелічення всіх змінних ставиться «;» Например:
«ВИСНОВОК» Текст цього блоку має таку структуру: «текст», змінна 1, «текст», змінна 2, …, змінна N; «текст», змінна N+1, …; тобто, текстові константи чергуються через кому зі змінними, що треба вивести на екран монітора. Наприкінці ставиться «;». Например:
«БЕЗУМОВНИЙ ПЕРЕХІД НА МІТКУ» Вмістом цього блоку є ім'я мітки з «;» на кінці. Например:
«МІТКА» Визначається аналогічно попередньому блоку.
«ПІДПРОГРАМА» Утримується ім'я підпрограми з параметрами. Например:
«МУЛЬТИВЕТВЛЕНИЕ» Варіант оператора «switch» мови Сі. У цьому блоці міститься ім'я перемінної, через яку виконуватиметься галуження. Например:
«ГІЛКА» Блок «гілка» можуть бути лише у зв’язці «мультиветвление». Окремо втрачає сенс. У блоці «гілка» задається константа, з якою виконується порівняння значення, отриманого у блоці «мультиветвление».
Застосування блоків продемонстровано в прикладах, приведених в приложении.
4. Система программирования.
4.1. Графічний редактор
Г. Р. — це програма, що дозволяє програмісту «малювати» нові, і редагувати старі блок-схемы. Користувачу пропонується режимі меню такі змогу редагування блок-схем: Видалення блоків (Установка блоків (Розмітка планшети координатної сіткою (Скролінг планшети (Вибір типу блоків (або стрілки, або блоки); Автоматичне поєднання двох виділених блоків на планшеті; Зміна параметрів планшети; Зміна палітри планшети (квітів); Можливості редагування з допомогою буфера обміну. Всі ці можливості можна вибирати або у вигляді маніпулятора миша, або з допомогою клавиатуры.
Розглянемо поняття ПЛАНШЕТ. Назвемо поверхню, де виконується малювання блок-схемы ПЛАНШЕТОМ. Вважатимемо, що розміри планшети не обмежені. У середньому кожен цей час користувач перебуває у позиції планшети з координатами (X, Y). Координати (X, Y) задаються в Декартовой системі координат, початок координат (0,0) — це середина планшети (саме у цієї точці перебуває користувач при початковому запуску системи «Блоксхема»).
Планшет то, можливо розмічено координатної сіткою (рис. 2.).
[pic].
рис. 2.
Шаг на планшеті обраний те щоб у клітину планшети вписувався один елемент блок-схемы.
У зв’язку з тим, що все простір, у якому виконується редагування блок-схемы, неможливо відобразити на екрані, то, на екрані в вікні редактора виводиться прямокутна область, паралельна осях координат, розміром N_X на N_Y, де N_X — кількість кроків із осі X, а N_Y — кількість кроків із осі Y.
Вікном редактора називається не та частина екрана, яка відводиться для зображення цієї прямокутної області. Зв’язок між областю планшети і вікном редактора представляє схема 1.
Y.
X0 X1 640.
Y0.
J.
N_Y.
Y1.
J+N_Y.
N_X.
X.
I I+N_X.
схема 1.
Розглянемо процедуру розміщення елементів блок-схемы з вікна редактора. Оскільки розроблювана система спирається на графічний драйвер, підтримуючий дозвіл 640 на 480 pixel, а координатні осі на екрані розташовані оскільки показано на схемою 1, то вікно редактора — це прямокутна область екрана з координатами верхнього лівого кута (X0,Y0) і з координатами нижнього правого кута (X1,Y1).
Тоді, у тому, аби прищепити певну частину планшети з вікна редактора, необхідні перетворення координат планшети в екранні координати. Вони здійснюються так: height =(Y1-Y0)/N_Y; це висота блоку в екранних координатах (width =(X1-X0)/N_X; це ширина блоку в екранних координатах (.
Далі встановимо відповідність між координатами блоків в координатної системі планшети і координатами блоків в екранної системе.
Вважатимемо, що є інша система координат, у якій I~I' і J~J', і, знаючи, що координаті (I, J) відповідає координата (X0,Y0), то, отже, I~I'=0 і J~J'=0. Аналогічно для координат (I+N_X, J+N_Y), знаючи, що їй відповідає, координата (X1-width, Y1-height) матимемо, що (I+N_X)~(I'+N_X)=N_X і (J+N_Y)~(J'+N_Y)=N_Y.
Отже блоком з координатами (і, j), де (і, j) належить прямокутнику [I, J, I+N_X, J+N_Y] матиме місце таке перетворення координат:
X = X0+(i-I)*width;
Y = Y0+(j-J)*height; де X, Y екранні координати блоку (і, j). Коли виконані ці перетворення, здійснюється висновок цієї прямокутної області у вікно редактора. Висновок здійснюється послідовно, перебираючи все елементи области.
Процедура відображення вікна на планшеті у вікно виведення дисплеї присутній практично переважають у всіх функціях графічного редактора. Завдяки їй здійснюється зв’язок користувача зі схемою, і відбиваються все зміни, вироблені користувачем над схемой.
Тепер на інші функції графічного редактора.
У системі «Блок-схема», як в будь-якій інший інтерактивною системі, задано кодові комбінації клавіш, внаслідок чого годі й виконувати повний набір команди до виконання будь-якого дії. І тому досить натиснути звані «гарячі» клавіші. Щодо на них можна отримати, обравши відповідного пункту в меню «СПРАВКА».
Полем вікна редактора рухається спеціальний графічний покажчик, що складає чергову позицію на планшеті. Рух цього покажчика організується з допомогою клавіш управління курсором чи з допомогою маніпулятора миша. Якщо покажчик пересувається межі вікна редактора, то здійснюється скролінг вікна по планшету. Організована цю процедуру наступним образом:
Оскільки вікно редактора менше планшети, його (вікно редактора) потрібно переміщати по планшету — це і називається скролінг планшети. За виконання цієї функції змінюється лише координата (I, J) верхнього лівого кута області, яка відображається з вікна редактора, і потім нова галузь наново виводиться у вікно редактора.
Виконується цю процедуру з допомогою клавіш в MS-Dos:
— вверх (.
— вниз (.
— вправо (.
— вліво (і навіть у вигляді маніпулятора миша під час виборів відповідних кнопок меню.
Вибір блоку, що необхідно встановити цю позицію виконується через пункт «БЛОКИ» чи «СТРІЛКИ» в підміню «РЕДАКТОР» головного меню. Узятий блок промальовується, коли натиснута клавіша чи одночасно нажаты ліва і права клавіші маніпулятора миша, і навіть коли обраний пункт «УСТАНОВИТЬ» в підміню «РЕДАКТОР» головного меню.
Вибір типу блоків (або стрілки, або блоки) можна проводити у вигляді «гарячих» клавиш:
— стрелки;
— блоки. чи обираючи відповідні команди у головному меню.
Видалення блоків виконується так: з допомогою покажчика вибирається блок, що потрібно видалити, і потім нажимается клавіша, або вибирається пункт «ВИДАЛИТИ» в підміню «РЕДАКТОР» головного меню.
У Windows варіанті ці можливості так можна вибирати у вигляді маніпулятора миша чи аналогічно з допомогою клавіатури. З іншого боку, Windows варіант передбачає поєднання двох заданих блоків із допомогою хвильового алгоритму Ли[10].
4.2. Вмонтований текстовий редактор
Текстовий редактор необхідний системі у тому, щоб наповнювати текстом блоки, створювані користувачем блок-схемы алгоритма.
Редактор для середовища Windows за своїми можливостями не поступається більшості сучасних текстових редакторів, наданих фірмою Borland. Редактор має такими возможностями:
. немає обмеження на розмір тексту всередині блока;
. допускаються роботу з буфером обмена;
. є можливість зміни шрифту текста;
. два режиму набору тексту програми (режими вставки і перезаписи);
. пошук тексту по заданому образцу;
. заміна заданого зразка тексту на поставлене текст.
Редактор, запропонований серед MS-Dos, є найпростішим варіантом текстового редактора, у якому можливий тільки набір тексту як накладення тексту на текст (режим перезапису), теж є обмеження на розмір тексту. Він повинна перевищувати 1104 символу кожному за блоку блок-схемы.
З допомогою клавіш управління здійснюється переміщення курсору по вікна редактора тексту блоку. А допомогою клавіш і здійснювати видалення тексту зі зсувом строки.
4.3. Интерпретатор
Що таке інтерпретатор? Як мовилося раніше вище — це таке транслятор, у якому процеси трансляції і виконання алгоритму суміщені у часі. До складу інтерпретатора входить блок аналізу, розпізнає оператори вхідного мови, набір підпрограм, відповідних різним операторам та Блок, управляючий порядком перегляду операторів і всієї хірургічної роботи интерпретатора.
4.3.1. Етапи трансляции.
Основою будь-якого природного чи штучного мови є алфавіт, визначальний набір допустимих елементарних знаків (літер, цифр і службових знаків). Знаки можуть об'єднуватись у слова — елементарні конструкції мови, аналізовані у цьому тексті (програмі) як неподільні символи, мають певний сенс. Іноді символ позначають одним знаком, що можна теж вважати словом. Наприклад, у мові З++ словами (символами) є основні символи, ідентифікатори, числа і пояснюються деякі обмежувачі, в частковості знаки операцій та дужки. Словниковий склад мови — набір допустимих слів (символів) — разом із описом способів їх представлення становить лексику языка.
Слова можуть об'єднуватись у складніші конструкції - пропозиції. У мові З++, наприклад, найпростішим пропозицією є оператор. Пропозиції будуються з слів (символів) і більше простих пропозицій з правилам синтаксису. Синтаксис мови є опис правильних пропозицій. Кожному правильному пропозиції мови приписується певний сенс. Опис сенсу пропозицій становить семантику мови. Практично семантика мови програмування є опис того, як кожне пропозицію слід виконувати на Э.В.М.
Алфавіт, лексика і синтаксис повністю визначають набір допустимих конструкцій мови та внутрішні стосунки між конструкціями. Семантика висловлює зв’язок між конструкціями у різних мовами. Переклад програми з однієї мови в інший у випадку полягає у зміні алфавіту, лексики і синтаксису мови програми зі збереженням семантики. У приватних випадках можуть змінюватися лише окремі елементи. Наприклад, завантажник змінює лише лексику, асемблер — алфавіт і лексику, а компілятор — алфавіт, лексику і синтаксис мови программы.
Трансляція зазвичай відбувається у кілька етапів, кожному у тому числі виконується цілком певна работа.
Вхідні програма то, можливо підготовлена різними зовнішніх пристроях й у удобочитаемости може мати неповні рядки — і інші індивідуальні особливості. З іншого боку, слова вхідного мови зазвичай мають різний формат, наприклад ідентифікатори, складаються з різного числа літер, числа — з різного числа цифр. Тому на згадуваній першому етапі трансляції здійснюється лексичний аналіз, котра перебувала приведення вхідний програми до стандартному виду — редагуванні програми — й переведення в внутрішній мову. Зазвичай на внутрішньому мові все слова всі мають однакову формат, що полегшує подальшу обробку. Поруч із переведенням внутрішній мову виконується лексичний контроль, виявляє неприпустимі слова.
Переклад на внутрішній язык.
Переклад мовою машины.
З другого краю етапі трансляції виконується синтаксичний аналіз, завданням якого входить розпізнавання типу пропозицій і виявлення структури програми, і навіть синтаксичний контроль, виявляє синтаксичні ошибки.
На етапі здійснюватися семантичний аналіз, під час якого проводяться дослідження кожного пропозиції з генерування семантично еквівалентних пропозицій об'єктного мови. Інакше кажучи, третьому етапі виконується власне перевод.
Іноді вводять іще одна етап, у якому виробляється оптимізація програми з метою зменшення її виконання і мінімізації використовуваної програмою памяти.
У трансляторах кожному з описаних етапів відповідає певна частина транслятора. Іноді окремі блоки виконують одночасно кілька етапів, наприклад семантичний аналіз, оптимізацію і генерування пропозицій вхідного мови. Також є трансляторы, у яких описана загальна схема повторюється кілька разів, наприклад, під час перекладу з вихідного мови на внутрішній, з внутрішнього на проміжний, вихідний чи объектный.
Транслятор, запропонований у цій роботі, має таку структуру:
Оптимизация не выполняется.
4.3.2. Лексичний анализ.
4.3.2.1. Завдання лексичного анализа.
Мета лексичного аналізу полягає у перекладі вихідної програми на стандартний, вхідний мову компілятора і перетворення її до виду, зручного для подальшого опрацювання на етапах синтаксичного і семантичного анализа.
У процесі лексичного аналізу зазвичай збираються із окремих знаків (літер і цифр) прості синтаксичні конструкції: ідентифікатори, числа, а також службові слова типу begin, end та інші. При подальшому опрацюванні такі прості конструкції розглядаються як неподільні, тому залишати їх розпізнавання і складання до етапу синтаксичного аналізу невигідно, передусім, з погляду загального часу й складності алгоритмів трансляции.
У випадку у процесі лексичного аналізу необхідні следующее:
1) перекодувати вихідну програму, аналізовану як вхідні рядок, і навести її до стандартному вхідному языку;
2) виділити й скласти з окремих знаків в слова ідентифікатори і службові слова (основні символи языка);
3) виділити й скласти з цифр, і навіть перекласти на машинну форму числові константы.
У деяких компіляторах лексичний аналіз становить окремий етап і виконується спеціальними блоками за — два перегляду вхідний програми. За інших компіляторах окремі завдання лексичного аналізу вирішуються різними етапах трансляції. Проте перекодування вхідний програми розвитку й приведення її до стандартному вхідному мови завжди виконує перший блок компилятора.
У результаті лексичного аналізу крім суто лексичного контролю (виявлення неприпустимих символів і службових слів, і навіть помилок записи ідентифікаторів і констант) іноді виконують частковий синтаксичний контроль. Зокрема, при лексичному аналізі легко перевіряється парність деяких основних символов.
Інший вид контролю, іноді застосовуваний при лексичному аналізі, — перевірка поєднуваності що стоять поруч символів. Наприклад, пари символів begin x і else begin — сочетаемы (припустимі), але ж символи, які у зворотному напрямку: x begin і begin else — несочетаемы. У той самий час пари +end, +/, *[ - несочетаемы в жодному порядку. Основний (головною) частиною лексичного аналізатора є сканер.
4.3.2.2. Сканер
Сканер — це частина компілятора, який читає вхідну програму і формує лексеми: константи, знаки операцій та т.д. Він також виконує лексичний контроль. Синтаксис лексем простий, може бути поставити автоматними граматиками, оскільки може бути легко запрограмувати. Отже, сканер виділяють окремим блоком.
Синтаксис кожної лексеми можна поставити з допомогою діаграми станів. Отже, алгоритм роботи сканера можна поставити з допомогою правила аналізу по діаграмі станів. Зауважимо, що процедуру аналізу представляє собою висхідний аналіз, основою кожному кроці є поточний символ і поточний стан. Тому діаграма станів є граф, подграфы якого це є діаграми станів окремих лексем.
Сканер програмується отже кожному кроці він виділяє одну лексему.
Нехай вхідні рядок: s1, s2, s3,…, sn. s, i СКАНЕР L, t де L — лексема, t — її тип.
0, константа типу int.
1, константа типу long_int t= 2, константа типу float.
3, константа типу char.
4, идентификатор
— 1, помилка, не розпізнавався б тип лексемы.
Сканер у процесі роботи розпізнає тип символу, тобто використовує подпрограмму:
si клас символу k где.
1, якщо si буква.
2, якщо si цифра.
3, якщо si ` k= 4, якщо si «чи «.
5, якщо si вірний знак.
0, якщо si помилковий символ.
Тоді діаграма станів має вигляд: (дивися в приложении).
Рис. 3. Блок схема лексичного анализа.
ЗАМЕЧАНИЕ:
1. У кожному стані сканер може виконувати додаткові дії з контролю правильності лексеми і перетворення під внутрішню форму.
2. Сканер виділяє найдовший лексему поки можливо, а коли покажчик слід за початку наступній лексеми. Зобразимо блок — схему роботи лексичного аналізатора (рис. 3.).
Оскільки сканер будується по діаграмі станів, то тут для простоти програмування побудували кінцевий автомат. Матриця переходів станів сканера приведено в приложении.
4.3.3. Синтаксичний і семантичний анализ.
Аналізатори виконують справді складну роботу з розчленовані вихідної програми на складові, формуванню її внутрішнього уявлення та занесенню інформацією таблицю символів та інші таблиці. У цьому також виконується повний синтаксичний і частковий семантичний контроль программы.
Звичайний аналізатор є синтаксично керовану програму. Насправді прагнуть відокремити синтаксис від семантики настільки, наскільки може бути. Коли синтаксичний аналізатор (распознаватель) дізнається конструкцію вихідного мови, він викликає відповідну семантичну процедуру, чи семантичну програму, яка контролює цю конструкцію з погляду семантики і далі запам’ятовує інформацію про неї таблиці символів чи у внутрішньому поданні програми. Наприклад, коли розпізнається опис змінних, семантична програма перевіряє ідентифікатори, вказаних у цьому описі, щоб у тому, що не були описані двічі, і заносить разом з атрибутами в таблицю символов.
Коли зустрічається інструкція присвоювання вида:
= семантична програма перевіряє зміну і вираз щодо відповідності типів і далі заносить інструкцію присвоювання у програмі у внутрішній представление.
Синтаксичний аналіз можна діаграмою станів, як і як і сканер. Тому і частково об'єднують їх і якщо можливо на той поєднують повністю. У цьому роботі процес лексичного, синтаксичного і семантичного аналізу всім блоків розділений. Матриці станів кінцевих автоматів синтаксичного аналізу блоків наведені у додатку. Семантичний аналіз виконується у процесі интерпретации.
4.3.4. Польська инверсная запис (ПолИЗ).
Перші процедурно-ориентированные мови програмування високого рівня призначалися на вирішення інженерних і науково — технічних завдань, у котрих докладно застосовуються методи обчислювальної математики. Значну частина програм вирішення цих завдань становлять арифметичні і логічні висловлювання. Тому трансляцією висловів займалися дуже багато дослідники і розробники трансляторів. На тепер розроблено велика кількість таких трансляторів. Зараз класичним став метод трансляції висловів, заснований на використанні проміжної зворотної польської записи, названої це у честь польського математика Яна Лукашевича, який вперше використовував цій формі уявлення висловів в математичної логике.
Мета польської инверсной записи — уявити операції вихідного висловлювання на порядку їх виконання (обчислення). У цьому роботі був використаний алгоритм побудови ПолИЗа, який було запропоновано Дейкстрой. Приклад ПолИЗа:
Вихідний вираз: x=a+f*c;
Вислів на ПолИЗе: xafc*+=.
Вочевидь, що обробляти таку послідовність операцій значна полегкість, оскільки їх розташовано гаразд їх виконання. Розглянемо алгоритм Дейкстры на формування ПолИЗа.
4.3.4.1. Алгоритм Дейкстры формування ПолИЗа.
ПРІОРИТЕТ ОПЕРАЦІЇ - це ціла кількість, що означає старшинство операції стосовно іншим операціям. Пріоритет операцій змінюється з використанням скобок (і).
Вихідна послідовність проглядається зліва на право, як вхідні послідовність элементов.
АЛГОРИТМ: 1. Якщо елемент операнд, він заноситься в ПолИЗ. 2. Якщо елемент операція, вона заноситься в ПолИЗ через СТІК по правилу.
2.1. Якщо СТІК порожній, то знак операції заноситься в СТЕК,.
2.2. Інакше: якщо пріоритет вхідного знака дорівнює 0, він заноситься в.
СТІК, інакше порівнюються пріоритети вхідного знака і знака в вершине.
СТЕКа.
2.3.Если пріоритет вхідного знака більше пріоритету знака в вершине.
СТЕКа, він заноситься в СТЕК.
2.4. Інакше з СТЕКа виштовхуються все знаки з пріоритетом більше або рівним пріоритету вхідного знака в вершині СТЕКа і приписують к.
ПолИЗу, потім вхідний знак заноситься в СТІК. 3. Особливо обробляються (і).
(- маючи пріоритет 0 відразу ж потрапляє заноситься в СТІК по 2.2.
) — маючи пріоритет рівний 1 виштовхує з СТЕКа все знаки до найближчій що відкриває дужки (, потім вони взаємно знищуються. 4. За появи ознаки кінця висловлювання (у разі ;) СТІК очищається: всі знаки виштовхуються і приписують до ПолИЗу. Також ПолИЗу відповідає зване дерево ПолИЗа. Приклад: (x+a)*(x-b)+3; Дерево:
x a x b.
ПолИЗ: x a + x b — * 3 +.
Побудова ПолИЗа з дерева здійснюється обходом дерева за правилом ліве поддерево, праве поддерево, корень.
4.3.4.2. ПолИЗ висловів, містять перемінні синтаксиса.
Крім операцій складання і множення будь-яка програма містить операції вычисляющие адреси елементів масиву залежно від індексних висловів. Наприклад: a[i+1]-b[i, j-1]*a[2*i+1].
Індексні выражения.
Виведемо формули обчислення адрес елементів масиву. Для одномірного масиву а, опис якого на Паскале і Сі має вигляд: a: array [1.n] of integer; // Pascal int a[n]; // C/C++ й у елемент має масиву займає k-байт.
Адреса першого елемента дорівнює A. З’ясуємо де чому дорівнюватимуть адреси інших елементів. І тому розглянемо розташування елементів масиву у фізичній пам’яті ЭВМ.
A +k +2k +3k A+k*(i-1)… k байт тогда a[i] А+k*(i-1) для мови програмування Паскаль, а мови програмування C/C++ a[i] A+k*i. Тоді якщо елемент займає k — байт, то a[i] ——-> A+k*(i-1) (1) a[i] ——-> A+k*i (1').
Для двумерного масиву: b: array [1.m, 1. n] of integer;// Pascal int b[m][n]; //Си Адреса елемента з індексами i, j обчислюється за правилом: b[i, j] ——-> B+k*((i-1)*n+(j-1)) (2) b[i, j] ——-> B+k*(i*n+j) (2') Щоб сформувати ПолИЗа введемо операцію АЭМ (адресу елемента масиву) з операндами: 1. Ідентифікатор масиву, йому в результаті розподілу пам’яті транслятором відповідатиме адресу першого елемента масиву. 2. Індексне вираз. Результат: адресу елемента масиву розрахована по формулам (1)-(2'). ПолИЗ: a і 1 + А.Э.М. b і j 1 — А.Э.М. a 2 і * 1 + А.Э.М. * - Аналіз ПолИЗа свідчить, що з операції АЭМ змінне число операндов і кількість треба ставити явно. Зробимо таку заміну: АЭМ — k], де k — кількість операндов. Тоді ПолИЗ: a і j + 2] b і j 1 — 3] a 2 і * 1 + 2] * -.
Изобразим дерево висловлювання: (дивися малюнок).
;
А.Э.М. *.
а + А.Э.М. А.Э.М.
і 1 b і - a +.
і j * 1.
2 i.
Отже, алгоритм Дейкстры доповниться такими правилами:
ПРАВИЛА:
1. [, маючи пріоритет 0 заноситься в СТІК [k, де k — мінімальне число операндов операції А.Э.М. 2., , маючи пріоритет 1 виштовхує з СТЕКа все найближчі знаки до найближчій [k збільшує k на 1: k=k+1;, куди заноситься. 3. ], маючи пріоритет 1 виштовхує з СТЕКа все знаки до найближчій [k, яка видаляється з СТЕКа, а ПолИЗ заноситься k].
4.3.4.3. Алгоритм перекладу ПолИЗа в машинні команды.
Відомо, що у зворотної польської записи операнды вміщено у тому ж порядку, що у вихідному вираженні, а знаки операцій під час перегляду записи зліва-направо зустрічаються у порядку, у якому треба виконувати відповідні дії. Звідси випливає основна перевага зворотної польської записи перед звичайній записом висловів зі дужками: вираз можна визначити у процесі однократного перегляду зліва направо.
Правило обчислення висловлювання на зворотної польської записи полягає у наступному. Зворотний польська запис проглядається зліва-направо. Якщо аналізований елемент — операнд, то розглядається наступний елемент. Якщо аналізований елемент — знак операції, то виконується війни операція над операндами, записаними лівіше знака операції. Результат операції записується замість першого (самого лівого) операнда, учасника операції. Інші елементи (операнды і це ознака операції), брали участь у операції, викреслюються із запису. Перегляд продолжается.
Через війну послідовного виконання цієї правила обіцяє усі фінансові операції, що у вираженні, і запис скоротиться до одного елемента — результату обчислення выражения.
Розглянемо приклад: a+b*c-d/(a+b).
ПолИЗ: abc*+dab+/;
Виконання правила до нашого прикладу призводить до послідовності рядків, записаних на другий графі таблиці № 2 (дивіться таку сторінку). Аналізований кожному кроці процесу елемент рядки відзначений курсивом. У третій графі таблиці записані відповідні дії, а четвертої графі - еквівалентні команди трехадресной машины.
Результат здійснення операції фіксується як робочої перемінної виду rj. Після чергової операції робоча змінна r1 чи r2 викреслюється, вивільнену робочу зміну можна використовувати знову для записи результату операції. Використання щоразу вільної робочої перемінної з мінімальним номером заощаджує кількість зайнятих робочих змінних. Такий приклад економії робочих осередків приведено у таблиці № 2. Це ж правило використав трансляторах.
Аналогічним чином можна записувати й вираховувати булевские выражения.
Послідовність машинних команд в таблиці № 2 є, сутнісно, результат трансляції висловлювання, записаного в зворотної польської записи, в машинні команди. Якщо кожного операнда, включаючи робочі перемінні rj, відомий адресу, щоб одержати остаточних машинних команд остается.
Таблиця № 2 | № |Стан рядки |Дія |Машинна | | | | |команда | |1 |2 |3 |4 | |1 | a bc*+dab+/- |Переглянути наступний елемент |- | |2 | a b c*+dab+/- |Переглянути наступний елемент |- | |3 |ab з *+dab+/- |Переглянути наступний елемент |- | |4 |abc * +dab+/- |r1=b*c |* b з r1 | |5 |ar1 + dab+/- |r1=a+ r1 |+ a r1 r1 | |6 |r1 d ab+/- |Переглянути наступний елемент |- | |7 |r1d a b+/- |Переглянути наступний елемент |- | |8 |r1da b +/- |Переглянути наступний елемент |- | |9 |r1dab + /- |r2=a+b |+ a b r2 | |10 |r1dr2 / - |r2= d/r2 |/ d r2 r2 | |11 |r1 r2 — |r1 =r1 -r2 |- r1 r2 r1 | |12 |rl |- |- |.
лишь замінити знаки операцій машинними кодами операцій, а операнды — адресами. Приклад показує, що в разі трансляція виконується не так важко. Проте правило обчислення значення висловлювання по ПолИЗу, що можна вважати одночасно правилом трансляції висловлювання на машинні команди, недостатньо деталізовано і формалізована для безпосередньої реалізацією машиною, хоча б оскільки у ньому визначено спосіб записи висловлювання на пам’яті машини та порядок використання робочих осередків. Для машинної реалізації потрібно понад формальне правило.
У розглянутий прикладі зустрічалися двомісні операції. Кожна така операція, зазвичай, замінюється однієї або двома машинними командами (в залежність від адресації машини). У випадку операція R може мати k операндов (k (1). На ЕОМ така є повинна замінюватись групою машинних команд. Вважатимемо, що на момент генерування машинних команд проведено розподіл пам’яті, й у операнд представлений відповідної посиланням на таблицю імен, що містить адресу операнда. Аналогічно, кожної робочої перемінної відомий її адрес.
Для трансляції висловів з зворотної польської запис у машинні команди використовується стік операндов (ЗІ) із покажчиком і. У вихідному стані стік операндов порожній, а покажчик i=1. Будемо також вважати, що у вихідному стані номер першій вільній робочої перемінної j=1.
Алгоритм трансляції ось у чому. 1. Взяти черговий символ P. S з зворотної польської записи висловлювання. 2. Якщо P. S — операнд, то занести P. S в СО[i], виконати i=i+1 перейти до пункту 1, бо інакше пункту 3. 3. Якщо P. S — не знак операції, то можливість перейти до пункту 4, інакше, якщо P. S — знак операції R, виконати следующее.
1. Серед елементів стека СО[i-k], де k — число операндов операції R, знайти робочу зміну з мінімальним номером l. Якщо аналізованих елементах стека немає робочих змінних, то покласти l=j.
2. Записати машинні команди, реалізують оператор присвоювання rl=R (СО[i-k],…, СО[i-1]). Тут R (x1, …, xk) — результат здійснення операції R над операндами x1, …, xk.
3. Занести символ rl в СО[i-k].
4. Виконати: i=i-k+1 і j=l+1. Перейти до пункту 1.
4. Якщо запис висловлювання вичерпана, то трансляція закончена.
Стік операндов мусить мати лише зміну rl, інакше потрібно записати інформацію про помилку в таблицю ошибок.
Вход.
Рис. 4. Блок-схема перекладу зворотної польської запис у машинні команды.
Для реалізації пункту 3.2. наведеного алгоритму використовуються заздалегідь підготовлені заготівлі груп машинних команд, у яких залишається лише підставити адреси операндов, узяті з стека операндов. Цю підстановку виконує підпрограма, відповідна аналізованої операції R.
Треба, проте, відзначити, що використовувана підпрограма визначається, не тільки знайома операції R, а й типом операндов. Наприклад, одна підпрограма відповідає операції складання речовинних чисел, іншу — операції складання цілих. Іноді у пункті 3.2. доводиться виконувати кілька підпрограм. Зокрема, якщо одне операнд цілий, а інший речовинний, то початку потрібно привести операнды одного типу, та був виконати підпрограму формування команди складання. При несумісності операндов або за невідповідність операндов знаку операції видається інформація про ошибке.
Блок-схема алгоритму перекладу зворотної польської запис у машинні команди приведено малюнку 4.
Зауважимо, що наведений раніше алгоритм доречний під час переведення гривень у машинні команда як арифметичних і логічних висловів, а й будь-яких текстів, записаних в зворотної польської записі розмови з використанням довільних операцій, реалізованих машинними командами.
4.3.5. Загальна схема роботи интерпретатора.
Розглянемо, що уявляє собою програма, написана мовою блок — схем з погляду інтерпретатора. Це список структур наступного виду: struct Blocks.
{ int type; // тип блоку int x; // координати блоку на планшеті по осі X int y; // координати блоку на планшеті по осі Y int true_x; // координати блоку на планшеті до переходу int true_y; // по ІСТИНІ (TRUE) int false_x; // координати блоку на планшеті до переходу int false_y; // по БРЕХНІ (FALSE) char* text; // покажчик на текст блоку struct Blocks far *next; // покажчик наступного року блок у списку блоков.
};
Мінімальною одиницею інтерпретації у мові блок-схем є блок. Роботою всього інтерпретатора управляє функція, яка переміщає фокус інтерпретації по блок-схеме, розпізнає тип блоку, яку підказує фокус і запускає функцію обробки (інтерпретації) відповідного блоку. Коли функція обробки блоку відпрацює, вона передає управління функції керуючої роботою інтерпретатора. Кожен тип блоку має власну функцію обробки. Розглянемо кожен блок по порядку.
ПОЧАТОК — блок «ПОЧАТОК» відпо-відає опис змінних. Рядок символів, що належить цьому блоку, перетворюється на список покажчиків (див. параграф «Структури даних»). Потім відбувається формування таблиці змінних разом з лексичній і семантичної перевіркою. Якщо функція блок відпрацювала безпомилково, то процес інтерпретації триває, інакше нет.
КІНЕЦЬ — Функція блоку щось робить. Потому, як передасть управління функцій управління інтерпретацією, інтерпретатор закінчує свою работу.
АВТОМАТИЧНІ ДІЇ - Рядок символів перетворюється на масив покажчиків. Далі ця масив перетворюється на зворотний польську запис (ПолИЗ) і виконується. Попередньо виробляється лексичний і синтаксичний аналіз. Якщо помилок немає, то управління передається функції управління интерпретацией.
ПІДПРОГРАМА — Попередньо виробляється лексичний і синтаксичний аналіз. Потім текст перетворюється на список дескрипторів ПолИЗа, і якщо помилок немає, то управління передається функцій управління интерпретацией.
ГАЛУЖЕННЯ ПО УМОВІ - Спочатку виробляється синтаксичний і лексичний аналіз. Потім рядок символів перетворюється на масив покажчиків, потім цей масив перетворюється на ПолИЗ і виконується. По виконанні ПолИЗа здійснюється семантичний аналіз. Якщо помилок був, то залежність від результату аналізу функцій управління передадуть інформація, як виконувати ветвление.
ВВОДВЫВОД — У цих блоках відбувається семантичний і лексичний аналіз. За результатами аналізів відбувається або видача повідомлень у вікно, або висновок (введення) значень змінних. Особливість виникає при обробці масивів, позаяк у такому разі слід вираховуватимуть адресу елемента масиву. І тому, вираз які стоять всередині квадратних скобок ([, ]) перетворюється на зворотний польську запис і після обробки ПолИЗа, відбувається або введення, або висновок певного елемента масиву. Після закінчення роботи функції обробки блоків, вони передають управління функцій управління интерпретацией.
МІТКА — Обробка цього блоку відбувається у функції блоку БЕЗУМОВНИЙ ПЕРЕХІД НА МЕТКУ.
БЕЗУМОВНИЙ ПЕРЕХІД НА МІТКУ — Функція обробки цього блоку шукає в списку структур блоків блок, у якому ті ж самі мітку, яку містить і вона сама (блок). Після закінчення роботи функція обробки блоку передає функції управління інтерпретацією, який блок треба здійснити перехід для продовження інтерпретації программы.
МУЛЬТИВЕТВЛЕНИЕ При виконання цієї блоку формується константа з якої виконуватися порівняння під час зустрічі блоком «ветвь.».
ГІЛКА Обробка цього блоку відбувається так: якщо константа, у цьому блоці, збігаються з константою, що була сформована у блоці мультиветвление, це відбувається перехід за істиною (true), інакше з брехні (false).
4.4. Оболонка системы.
4.4.1. Фундаментальна обізнаність із файлами.
У нашій системі, як і на будь-якій інший, роботу з файлами просто необхідна. Це першу чергу, пов’язане про те, що користувач, створивши блок-схему, захоче її зберегти, з тим метою, щоб використовувати їх у дальнейшем.
У системі «Блок схема» до роботи з файлами створена уніфікована і вельми дружелюбний система діалогів з користувачем. Вона дозволяє легко зберігати схеми осіб на зовнішньому запоминающем устрої (дискета чи вінчестер) чи зчитувати вже. За основу діалогів системи взято діалоги, розроблені фірмою Borland, і кілька модифіковані у варіанті під операційну систему MS-Dos, а під Windows прийнято стандартні діалоги в середовищі MS Windows 95. Схема, створена системі «Блок схема», зберігається на диску і має унікальне ім'я. Файл має розширення sch — MS-Dos і scw — Windows.
Файл схеми є послідовність наступних записів: struct FILE_SCHEME.
{ int type; // тип блоку int x; // координати блоку на планшеті по осі X int y; // координати блоку на планшеті по осі Y int true_x; // координати блоку на планшеті до переходу int true_y; // по ІСТИНІ (TRUE) int false_x; // координати блоку на планшеті до переходу int false_y; // по БРЕХНІ (FALSE).
}; і рядок, що містить текст даного блока.
Ці записи будуються так. У центрі type міститься тип, що зберігається блоку. У полях x, y — координати блоку на планшеті. У полях true_x, true_y — координати блоку на планшеті до переходу за істиною. І відповідно, в полях false_x, false_y — координати блоку на планшеті до переходу за умовою брехня. У цьому полі міститься текст відповідний даному блоку чи текстова константа NULL, якщо тексту нет.
Послідовність записів створюється скануванням списку структур блоків і переведенням у внутрішній уявлення блок — схеми. Запис закінчується, коли список структур буде цілком просканирован.
Крім цього, у Windows версії системи в файл блок схеми додаються ключове слово у тому, щоб за зчитуванні блок-схем був допущено помилок, і для виявлення їх можна було повідомити звідси пользователю.
4.4.2. Ознайомлення з системой.
4.4.2.1. MS-Dos версія системы.
Отже, Ви вирішили попрацювати і системи, запропонованої у цій роботі. Ви має перебувати в операційній системі MS-DOS 3.0 чи Windows 3.1 і від. Вибравши в диспетчері файлів ім'я програми MAIN_CURS.EXE, запустіть її. На моніторі комп’ютера з’явиться головне вікно програми, у якому вказані автор праці та його науковий керівник. Після цього необхідно натиснути клавішу, або підвести покажчик маніпулятора миша на кнопку і натиснути ліву кнопку маніпулятора. [pic].
Пункти головного меню мають таке назначение:
Файл у тому, щоб зробити блок-схему алгоритму, вважати її з диска, записати на диск вийти з системы.
Редактор підміню цього пункту призначено до створення і редагування блок-схем. Вона надає набір блоків і стрілок для побудови блок-схем, і навіть дає можливості видаляти блоки і виробляти розмітку екрана координатної сеткой.
Текст цей пункт призначений для набору і редагування тексту всередині блоку. [pic].
Інтерпретація пункти цього меню дозволяють запускати пошаговый отладчик, організують перегляд таблиці змінних, і навіть запускають интерпретатор.
Довідка тут можна одержувати інформацію про систему або про мові блок -схем.
Якщо ви виберете пункт «новий файл», одержите вікно графічного редактора блок-схем, який розбитий координатної сіткою, але в полі редактора перебуватиме графічний покажчик, який би поточне становище блока.
Після вибору пунктів «Блоки» чи «Стрілки» праворуч від поля графічного редактора з’являються або стрілки, якими з'єднуються блоки, або безпосередньо самі блоки. Перед Вами з’явилося вікно графічного редактора (у ньому створюється і редагується блок-схема) з набором блоків, виділені на малювання блок схеми алгоритма.
Якщо ви натиснете комбінацію, та над Вами з’явиться вікно текстового редактора. У ньому Можете виробляти набір і редагування тексту, який належить даному блоку. Для виходу потім із нього треба натиснути клавішу у своїй текст цього блоку буде автоматично сохранен.
Якщо ви вирішили запустити програму виконання, то Вам потрібно вибрати пункт «Інтерпретація» у головному меню, а ньому пункт «виконати». Після цього, перед Вами з’явиться вікно, яке повідомить Вам, чи були Вами помилки під час створення програми. Якщо цього був, та над Вами з’явиться таке вікно, що називається вікном интерпретации.
[pic].
По виконанні перевірки і виявлення помилок видається повідомлення про наявності ошибок:
[pic].
Після закінчення інтерпретації Вам буде видано повідомлення про те, як пройшов процес інтерпретації (успішно чи ні). Повідомлення виглядає наступним образом:
[pic].
Щоб подивитися значення змінних треба тому ж підміню вибрати пункт таблиця змінних. Виглядати через монітор комп’ютера це буде так:
[pic].
Щоб із системи потрібно вибрати команду «вихід» в меню файл чи натиснути клавіші: .
4.4.2.2. Windows версія системы.
Для системи під операційну систему Windows, Ви повинні запустити файл «Блок-схема.exe». На екрані з’явиться головне вікно программы.
[pic].
Пункти головного меню мають таке назначение:
Файл у тому, щоб зробити блок-схему алгоритму, вважати її з диска, записати на диск вийти з системы.
Редактор підменю цього пункту призначено до створення і редагування блок-схем. Вона надає панель інструментів — набір блоків і стрілок для побудови блок-схем, і навіть надає можливості видаляти блоки і виробляти розмітку екрана координатної сіткою, і дає підстави працювати з буфером обмена.
Редактор тексту блоку цей пункт призначений для набору і редагування тексту всередині блока.
Інтерпретація пункти цього меню дозволяють запускати пошаговый отладчик, організують перегляд таблиці змінних, і навіть запускають интерпретатор.
Опції завдання параметрів системи та планшета.
Вікно роботу з вікнами приложения.
Допомога тут можна одержувати інформацію про систему або про мові блок -схем.
При початковій завантаженні відображається коротка панель інструментів, але коли Ви створите або нову блок-схему, або будете редагувати стару, з’являться додаткові панелі інструментів. З їхніми допомогою працювати і системи стає значно проще.
[pic].
Якщо ви активізуєте будь-який намальований блок і виберете пункт меню «Редактор тексту блоку» чи двічі клацніть лівої клавіш мишки на відповідному зображенні блоку, відкриється вікно текстового редактора.
[pic].
Текстовий редактор дозволяє виконувати такі действия:
[pic].
. Вирізати виділений текст з тексту блоки і записати їх у буфер обмена;
. Вставити текст з буфера;
. Змінити шрифт текста;
. Розв’язати чи заборонити доступом до панелі инструментов;
. Знайти текст по заданому образцу;
. Замінити поставлене зразок тексту нового текст.
Для виходу з редактора треба натиснути клавішу, або кнопку з написом «Выход».
Якщо ви вирішили запустити програму виконання, то Вам потрібно вибрати пункт «Інтерпретація» у головному меню, а ньому пункт «виконати». Після цього, перед Вами з’явиться вікно, яке повідомить Вам, чи були Вами помилки під час створення програми. Якщо цього був, то програма запускається на виконання, причому процес виконання відображається на блок-схеме.
[pic].
Кроме команди «виконати «можливі такі команды:
. Покрокова отладка;
. Наступний шаг;
. Перервати интерпретацию;
. Встановити точку входу в программу;
. Експорт мовою програмування Сі. Останні два команди можна виконувати лише у режимі покрокової трансляции.
Під час роботи транслятора видається таке окно,.
[pic].
и для виявлення помилки видається вікно повідомлень, у якому описана можлива помилка. Например,.
[pic].
А загалом це буде наступним образом:
[pic].
Если ви захочете змінити параметри планшети, то Вам потрібно викликати «властивості «системи. І тому Вам потрібно одного разу натиснути праву кнопку миші. Після цього перед Вами з’явиться контекстне меню з такими пунктами:
. Видалити блок;. Копіювати блок;. Вставити блок;. Вирізати;. Свойства.
Нажав до пункту властивості, перед Вами з’явиться таке діалогове окно:
[pic].
Закладка «Планшет» відпо-відає властивості планшети. Закладання «Редактор» відпо-відає властивості текстового і графічного редакторів. Закладання «Інтерпретатор» відпо-відає параметри интерпретатора.
А, щоб подивитися значення змінних, треба меню «Вікно» вибрати пункт «таблиця змінних «. Виглядати через монітор комп’ютера це буде так:
[pic].
Здесь відбиваються перемінні та його значення. З іншого боку, існує можливість редагування списку переменных.
Щоб закінчити роботи з системою потрібно вибрати команду «вихід» в меню «файл» чи натиснути клавіші: .
4.5. Внутрішнє уявлення данных.
Перерахуємо основні структури даних, використовувані у системі «Блок схема».
Блок-схема алгоритму подається як список структур наступного виду: struct BLOCK.
{ unsigned int type; // тип блоку int x; // координата блоку по осі x int y; // координата блоку по осі y char *text; // текст блоку int true_x; // перехід по ІСТИНІ по осі x на планшеті int true_y; // перехід по ІСТИНІ по осі y на планшеті int false_x; // перехід по БРЕХНІ по осі x на планшеті int false_y; // перехід по БРЕХНІ по осі y на планшеті struct BLOCK *next; // покажчик наступного року елемент схеми bool StopRun; // ознака точки входу у програмі bool ErrorFlag; // ознака наявності помилок у цьому блоці bool RunBlock; // ознака виконання блоку в поточний момент struct SVERTKA* Poliz; // полиз тексту блока.
};
Файл схеми є послідовність наступних записів: struct BLOCK.
{ unsigned int type; // тип блоку int x; // координата блоку по осі x int y; // координата блоку по осі y char *text; // текст блоку int true_x; // перехід по ІСТИНІ по осі x на планшеті int true_y; // перехід по ІСТИНІ по осі y на планшеті int false_x; // перехід по БРЕХНІ по осі x на планшеті int false_y; // перехід по БРЕХНІ по осі y на планшете.
};
Таблиця змінних освічена так: вона з списку структур наступного виду: struct VARIABLE.
{.
AnsiString Hint; // підказка при індексації char* name; // ім'я перемінної char type; // тип перемінної unsigned int Size; // розмірність масиву, якщо Size == 0,.
// це змінна unsigned int* SizeN;// масив значень размерностей,.
// якщо це змінна то SizeN == NULL char* ready; // ознака готовності на роботу перемінної int* __int; // значення перемінної типу int long int* __long_int;// значення перемінної типу long int char* __char; // значення перемінної типу char float* __float; // значення перемінної типу float double* __double; // значення перемінної типу double struct VARIABLE* next;// покажчик наступного року елемент таблицы.
// переменной.
};
Таблиця констант також представлена списком структур наступного виду: struct CONSTANTA.
{ unsigned char type; // тип константи int __long_int; // константа типу long int int __int; // константа типу int char __char; // константа типу char float __float; // константа типу float double __double; // константа типу double char* __string; // константа типу string struct CONSTANTA* next;// покажчик наступного року елемент таблицы.
};
Послідовність тексту блоку, як говорилося раніше, при трансляції перекладається внутрішній мову транслятора. У цьому системі це список пакунок, які мають таку структуру: struct SVERTKA.
{ unsigned char type; // тип пакунки unsigned char intype; // підтип пакунки (номер операції, функции,.
// процедури у списку функцій) struct VARIABLE* variable;// якщо це змінна то variable==NULL.
// якщо перемінної немає у таблице.
// змінних то variable == NULL struct CONSTANTA* constanta;//указатель на таблицю констант.
// якщо це константа то constanta==NULL.
// якщо такий константи немає у таблице.
// констант то constanta == NULL struct SVERTKA* next; // покажчик наступного року елемент пакунки int result; // лічильник числа операндов операцій чи функции.
};
Заключение
.
Ця робота є транслятор з мови блок схем.
Система складається з оболонки, графічного редактора блок-схем, вмонтованого текстового редактора, інтерпретатора, покрокового отладчика і конвертора мовою Си.
Система налагоджено, й протестирована на серії прикладів. Система реалізована у двох вариантах:
. Під операційну систему MS-Dos,.
. Під операційні системи Windows NT, Windows 95, Windows 98.
Розмір виконуваного файла серед MS-Dos 300 Кбайт, серед Windows 900 Кбайт.
Результати цієї роботи було представлені на 6ой міжнародної науковопрактичної конференції «Нові інформаційні технології університетській освіті», яка проходила місті Новосибірську з 17 по 19 березня 1999 року. На конференції було зроблено доповідь (тези опубликованы).
Система створювалася з єдиною метою навчання студентів першого курсу ФПМиК основам програмування. Передбачається її активне использование.
1. Лебедєв В. М. Введення у системи програмування. — М: Статистика, 1975.;
315с. 2. Грис Д. Конструювання компіляторів для цифрових обчислювальних машин,.
— М: Світ, 1975.-544с. 3. Касьянов В. М., Поттосин І.В. Методи побудови трансляторов.;
Новосибірськ: Наука, 1986. -343с. 4. Ахо А., Ульман Дж. Теорія синтаксичного аналізу, перекладу і компіляції в 2-х томах. — М: Світ, 1978. 5. Соловйов О. С. Інтерпретатор мови блок-схем. // Матеріали науковопрактичної конференції «Нові інформаційні технології університетській освіті». — Новосибірськ: Видавництво ИДМИ, 1999.;
227с. 6. Дьомін О.Ю., Гусєв А.В. Візуальне програмування програм з урахуванням блок-схем. // Матеріали науково-практичній конференції «Нові інформаційні технології університетській освіті» Новосибирск:
Видавництво ИДМИ, 1999.-227с. 7. Паронджанов В. Д. Мова програмування «ДРАКОН» // Програмування. -.
1995. — № 3. 8. Паронджанов В. Д. Учися малювати ясні блок-схемы. — М: «Радіо і связь»,.
1995. 9. Рейсдорф Кент, Хендерсон Кен Освой самостійно Borland C++Builder. ;
Москва: ЗАТ «Видавництво БІНОМ», 1998.-704с. 10. Lee C.Y. An algorithm for path connetion and its applications. // «IRE.
Trans.", V. EC-10 — № 3.
Приложение.
Додаток 1: Приклади блок-схем.
MS-Dos версия:
[pic].
Windows версия:
[pic].
Приклад 1. Перебування максимуму з цих двох чисел.
[pic].
Приклад 2. Сортування методом пляшечки (Windows версия).
[pic].
Пример3. Обчислювальна програма (MS-Dos версия).
Додаток 2: Матриці переходів анализаторов.
Матриця лексичного аналізатора (сканера).
| |0|(|)|+|-|/|*||=|^|||!|[|]|,|;|&|.|(|0|‘|‘|"| | | | | | | | | | | | | | | | | | | | | | | |'| | | |0|1|2|2|2|9|1|1|1|1|2|1|1|2|2|2|2|2|2|3|-|E|0|4|6| | | | |2|2| |2|4|5|7|4|4|8|3|2|2|2|2|2| |9| | | | | |1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|-|-|-|0|-|-| | | | | | | | | | | | | | | | | | | | |1|1|1| |1|1| |2|-|2|-|0|0|0|0|0|0|0|0|0|0|-|0|0|0|0|3|-|-|0|-|-| | |1| |1| | | | | | | | | | |1| | | | | |1|1| |1|1| |3|-|3|-|0|0|0|0|0|0|0|0|0|0|-|0|0|0|0|-|-|-|0|-|-| | |1| |1| | | | | | | | | | |1| | | | |1|1|1| |1|1| |4|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5| |5|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|7|-| | |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1| |6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|-|6|6|8| | | | | | | | | | | | | | | | | | | | | | |1| | | | |7|-|-|-|0|0|0|0|0|0|0|0|0|0|0|-|0|-|0|0|-|-|0|-|-| | |1|1|1| | | | | | | | | | | |1| |1| | |1|1| |1|1| |8|-|-|-|0|-|-|-|-|-|-|-|-|-|-|-|-|0|0|-|-|-|-|0|-| | |1|1|1| |1|1|1|1|1|1|1|1|1|1|1|1| | |1|1|1|1| |1| |9|0|0|0|-|1|-|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|-| | | | | |1|0|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| |1| |1|-|-|-|0|-|-|0|0|0|0|-|0|0|0|-|0|0|0|0|-|-|-|0|-| |0|1|1|1| |1|1| | | | |1| | | |1| | | | |1|1|1| |1| |1|0|0|0|-|-|0|-|-|-|-|-|-|-|-|-|-|-|-|-|0|-|-|0|0| |1| | | |1|1| |1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | | |1|0|0|0|-|-|1|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|0| |2| | | |1|1|3|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | | |1|-|-|-|-|0|-|0|0|0|0|-|0|0|0|-|0|0|0|0|-|-|-|0|-| |3|1|1|1|1| |1| | | | |1| | | |1| | | | |1|1|1| |1| |1|0|0|0|-|-|-|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|0| |4| | | |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | | |1|0|0|0|-|-|0|-|-|1|0|1|-|-|-|-|-|-|-|-|0|-|-|0|0| |5| | | |1|1| |1|1|6| |1|1|1|1|1|1|1|1|1| |1|1| | | |1|0|0|0|-|-|-|-|-|-|-|1|-|-|-|-|-|-|-|-|-|-|-|0|-| |6| | | |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1| |1|0|0|0|-|-|0|-|-|-|1|1|-|-|-|-|-|-|-|-|0|-|-|0|0| |7| | | |1|1| |1|1|1|6|1|1|1|1|1|1|1|1|1| |1|1| | | |1|0|0|0|-|-|0|-|-|-|-|1|-|1|-|-|-|-|-|-|0|-|-|0|0| |8| | | |1|1| |1|1|1|1|1|1|9|1|1|1|1|1|1| |1|1| | | |1|0|0|0|-|-|0|-|-|-|-|-|-|-|0|-|-|-|-|-|0|-|-|0|0| |9| | | |1|1| |1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | | |2|0|0|0|-|-|-|-|-|-|-|1|-|-|0|-|-|-|-|2|0|-|-|0|0| |0| | | |1|1|1|1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | | |2|0|0|0|-|-|0|-|-|-|-|-|-|-|0|-|-|-|-|-|0|-|-|0|0| |1| | | |1|1| |1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | | |2|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| |2| | | | | | | | | | | | | | | | | | | | | | | | | |2|0|0|0|-|-|-|-|-|-|-|1|-|-|0|-|-|-|-|-|0|-|-|0|0| |3| | | |1|1|1|1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | | |2|0|0|0|-|-|0|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|0| |4| | | |1|1| |1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | |.
Матриця синтаксичних переходів блоку «НАЧАЛО».
|сост|Иден|Конс|Int |Long|Char|Floa|Doub|, |; |[ |] |NULL|(| |ояни|тифи|тант| | | |t |le | | | | | | | |е |като|а | | | | | | | | | | | | | |р | | | | | | | | | | | | | |0 |-30 |-31 |2 |1 |2 |2 |2 |-32 |-32 |-32 |-32 |Є |-32 | |1 |-30 |-31 |2 |-30 |-30 |-30 |-30 |-32 |-32 |-32 |-32 |-32 |-32 | |2 |3 |-33 |-33 |-33 |-33 |-33 |-33 |-32 |-32 |-32 |-32 |-32 |-32 | |3 |-32 |-32 |-32 |-32 |-32 |-32 |-32 |2 |0 |4 |-32 |-32 |-32 | |4 |-34 |5 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 | |5 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |4 |-34 |-34 |6 |-34 |-34 | |6 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |2 |0 |-34 |-34 |-34 |-34 |.
Матриця синтаксичних переходів блоку «ВВОД».
|Состояние |ідентифікатор |[ |, |; |(|NULL | |0 |1 |-35 |-35 |-35 |-35 |-35 | |1 |-35 |1 0 |0 |2 |-35 |-35 | | | |-36 | | | | | |2 |1 |-35 |-35 |-35 |-35 |Вихід |.
Матриця синтаксичних переходів індексації масивів 1.