"Робота з таблицями загального користування на етапі лексичного аналізу мови Норма"
1. ВСТУП Завдання, отримане мною на УІР і КП в даному семестрі полягало в наступному: - ознайомитися з мовою програмування Норма і вивчити його, - вивчити структуру транслятора з мови програмування Норма; - ознайомлення з мовою пограммірованія РЕФА; - розробити структуру даних для реалізації роботи з таблицями загального користування; - написати функції роботи стабліцамі. 2. Загальний опис мови Норма Мова програмування Норма є декларативним (непроцедурного) мовою і призначений для специфікації чисельних методів розв'язання задач математичної фізики. Спочатку він був орієнтований на вирішення задач математичної фізики різницевим методами, однак може бути використаний для рішення більш широкого класу обчислювальних завдань. Типовий процес вирішення завдання з області математичної фізики складається з наступних етапів. 1. Постановка завдання. Виходом цього етапу є звичайно система диференціальних рівнянь, що описують завдання. 2. Вибір просторово-часової сітки і дискретизація рівнянь за допомогою одного з різницевих методів. 3. Вибір методу розв'язання дискретних рівнянь. У результаті виходять формули (співвідношення), опісивающійе необхідні обчислення у вузлах сітки. 4. Програмування отриманих формул на деякій мові, яка забезпечує рішення задачі на обчислювальній машині. Головна ідея, покладена в основу мови Норма, полягає в тому, що отримані фахівцем у процесі розв'язання прикладної задачі розрахункові формули майже безпосередньо використовуються для введення в обчислювальну систему і проведення счета.Такім чином, мова Норма дає прикладного математику можливість сформулювати своє завдання у звичних для нього термінах. Організація процесу обчислень з урахуванням архітектури ЕОМ (можливостей паралельної, векторної обробки і т. п.) - зто завдання транслятора з мови Норма. Істотним фактом є можливість реалізації однієї програми на мові Норма різними обчислювальними процесами. Саме розробка алгоритму з характеристиками, близькими до оптимальних і ефективно враховують особливості конкретних ЕОМ, є найбільш вузьким місцем створення високоякісного програмного забезпечення. Запис на мові Норма - це, по суті, сувора запис чисельних методів розв'язання математичної задачі, запис ще не алгоритмів, а просто розрахункових формул і решті необхідної інформації, яку необхідно знати, щоб написати програму для ЕОМ. Відзначимо, що в записі на Нормі не потрібно ніякої інформації про порядок рахунку, способи організації обчислювальних (циклічних) процесів. Порядок пропозицій мови може бути довільним - інформаційні взаємозв'язки будуть виявлені і враховані при організації процесу рахунку транслятором. Вибір рівня мови Норма визначає характерну його рису - в цій мові немає необхідності вводити такі поняття, як оператор присвоювання і можливість перепрісваіванія значень (типу х: = х +1) і оператори переходу. Наявність таких понять в традиційних мовах програмування пояснюється необхідністю формулювання конкретного алгоритму з урахуванням питань економії та розподілу пам'яті, порядку виконання операторів і т. п. Побічний ефект в мові Норма відсутня за визначенням. Зрозуміло, що багато хто з цих питань з'являються знову на етапі синтезу робочої програми. Однак, тут вони вирішуються автоматично за суворими правилами, що гарантує правильність синтезується програми. Непроцедурного мови Норма дозволяє подолати ще одну трудність, пов'язану з розпаралелюванням алгоритму за рахунку на ЕОМ, що допускають поєднання операцій. Відомі методи розпаралелювання послідовних алгоритмів засновані на виявленні, при деяких обмеженнях, частин алгоритму, які можна виконувати незалежно, відповідно із заданим критерієм паралелізму - асинхронні обчислення, синхронні і т. п. Проте, виявлення взаємозв'язків у вже сформованому послідовному алгоритмі є неприродною і важкою завданням, бо аналізована формулювання, як правило, насичена надлишковими взаємозв'язками (типу введення робочих змінних для економії пам'яті, конкретні способи організації циклів і т. п.). Взагалі кажучи, ні звідки не випливає, що послідовний алгоритм треба транслювати в паралельний, а не визначати паралельний відразу по непроцедурного запису. Ці властивості, і деякі інші обмеження, дозволяють строго обгрунтувати розв'язність синтезу вихідний програми, тому що в досить загальній постановці рішення цього завдання призводить до значних математичних труднощів - вона може виявитися NP-повної або взагалі нерозв'язною. З іншого боку, дослідження, пов'язані з розробкою і застосуванням мови Норма показують, що наявні обмеження прийнятним з практичної точки зору. 3 Структура транслятора з мови Норма. Транслятор з мови програмування Норма вже написаний на мові рефа. І хоча мова программіорванія Рефаїл Весма зручний для обробки символьної інформації, транслятор написаний на цій мові дуже не ощадливо використовує ресурси обчислювальної машини, а саме оперативну пам'ять, що часто правильно написану програми неможливо оттрансліровать з брак оперативної пам'яті. Тому було вирішено перевести транслятор з мови програмування Норма на мову програмування Сі, що був обраний з наступних причин: - мова Сі дозволяє набагато ефективніше використовувати ресурси обчислювальної машини; - мова Сі універсальний і зручний для вирішення завдань системного програмування - розробці трансляторів, операційних систем , екранних інтерфейсів, інструментальних засобів; - розробниками мови Норма вже написаний інтерфейс на мові Сі, що дозволяє закінчені частини транслятора, написані на Рефале, замінювати на закінчені частини транслятора, написані на Сі, для налагодження транслятора. У процесі трансляції, вирішуються як традиційні завдання - лексичний синтаксичний, семантичний аналіз, генерація вихідний програми, так і завдання, які визначаються специфікою мови Норма: організація обчислень по непроцедурного опису завдання з виявленням можливого паралелізму обчислень, семантичний контроль можливості організації обчислень з урахуванням можливостей вихідного мови і архітектури комп'ютера. Вихідними язикомі можуть бути мови Фортран ВП орієнтований на багатопроцесорний варіант ЕОМ ЄС-1191 і Фортран JNS. Трансляція проводиться кожного розділу, що входить до Норма програму, проводиться автономно: для кожного розділу або ж видається програма на вихідному мовою, або, якщо були виявлені синтаксичні або семантичні помилки, видається повідомлення про помилку, після чого здійснюється перехід до трансляції чергового розділу. Транслятор з мови програмування має наступну структуру: Вхід: _______________ __________________________ ________________________ вихідний текст Лексичний аналіз Синтаксичний аналіз програми + -> (Виділення лексем, і частково семантичний опції командного гуппріровка лексем, -> аналіз описів і -> рядка початкове заповнення операторів -- --------------- таблиць імен і констант) (заповнення всіх Абліцов) ------------------------- ------------------------- ________ ________________ _________ Табл. --- Табл. - Менежер ПАМ'ЯТІ множин ________________ і т.п. _______ _________ --------- _________ Вихід: __________________ ______________ ___________ ___________ Побудова графа Органінізація Генерація Текст -> інформаційних -> паралельних -> Фортран--> програми залежностей опе-обчислень програми на Фортране ратора програми -- ------------ ----------- ----------- ---------------- - На вхід лексичного аналізатора надходить текст вихідної программи.На виході - відсортований (за описами, операторам і ітерація) список лексем, початково заповнення таблиці імен і констант. Далі цей список надходить на вхід синтаксичного аналізатора, де відбувається розбір конструкцій-описів, операторів, ітерацій і заповнюються таблиці імен, констант, множин, описи операторів і ін Перед початком етапу синтаксичного аналізу, длямаксімальной очищення пам'яті відбувається конвертація початкових таблиць імен і констант. Ці таблиці надходять на вхід наступного етапу, де відбувається побудова графа інформаційних залежностей, який використовується на следуещем етапі при визначення порядку обчислень і поділ на паралельні гілки, що не залежать один від одного. На виході отримуємо внутрішні коди. Внутрішні коди надходять на вхід кодогенераціі. Виходом кодогенераціі є програма на мові Фортран. Для забезпечення доступу до верхньої пам'яті, а також для можливого свопінгу всі операції з оперативною пам'яттю здійснюються з використанням бібліотеки функцій менеджера пам'яті, написаної співробітниками інституту прикладної математики. 4 Опис і рішення задачі. 4.1 Постановка завдання. У світлі вищесказаного перед нами (групою розробників) постало завдання напсанія транслятора з мови Норма з використанням інструментальних засобів мови програмування Сі та бібліотеки функцій роботи з операівной пам'яттю. Переді нами (двома розробниками) було поставлено завдання написання функцій роботи з таблицями імен і констант. 4.2 Рішення завдання. Для початкового заповнення таблиць імен і констант були обрані хеш-таблиці. При цьому ми програвали у використанні оперативної пам'яті, але вигравали у часі (в порівнянні з "деревами"). Враховуючи підвищені вимоги до використання пам'яті нами було рпінято рішення після закінчення етапу лексичного аналізу (тобто після того, як завершиться попереднє заповнення таблиць імен і констант і нам буде вточності відомо кількість ідентифікаторів і констант використовуються в транслюється програмі) провести конвертацію пошукової частини хеш - таблиць у безперервні масиви фіксованої довжини. При цьому ми збільшуємо обшее час трансляції за рахунок часу конвертації, але виграємо у використанні оперативної пам'яті за рахунок зменшення числа інформаційних полів (в хеш-таблиці сушествует поле містить код ідентифікатора (константи), який є ключем цього ідентифікатора (константи) в подальшій роботі транслятора , в масиве роль ключа буде грати змішання зтого елемента від початку масиву - індекс масиву), а так само за рахунок звільнення неісопльзуемих учасков в хеш-таблиці (у будь-хеш-таблиці з за випадковості процесу хешування з'являються невикористані області приблизно 30% від величини всій таблицю). Плюсом також є умьшеніе часу пошуку по ключу. У масиве ця операція еквавалентна взяття індексу від масиву. У хеш-таблиці поік набагато довше. 4.3 Вибір структури даних 3. ВИСНОВОК У результаті проведеної роботи мною були досягнуті следуюющіе цілі: - ознайомилася і вивчила непроцедурного мова програмування Норма, призначений для запису чисельних методів розв'язання задач математичної фізики різницевим методами; - вивчила структуру транслятора з мови програмування Норма; - ознайомилася з методами лексичного аналізу; - вивчила структуру лексичного аналізатора; - розробила структуру даних своєї частини завдання для реалізації лексичного аналізатора;-написала функцію, на вхід якої надходить список лексем, а на виході отримуємо список списків. Елементом цього списку списків є список лексем, який являє собою одну пропозицію програми, написаної на Нормі, закінчується крапкою. Тобто ця функція "ріже" надходить на вхід список лексем по точках, а на виході отримуємо список пропозицій, кожне з яких закінчується крапкою і представляється списком лексем. Програма знаходиться на стадії розробки. Завершення роботи планується в наступному семестрі. Завдання на УІР і КП виконала полностью.Спісок літератури: А.Н. Андріанов, К.Н. Ефімкін, І.Б. Задихайло, Н.В. Поддерюгіна "Мова Норма" А.Н. Андріанов, К.Н. Ефімкін, І.Б. Задихайло "непроцедурного мова Норма і методи його реалізації" А.Б. Бугера "Реалізація математичних функцій мови Норма для розподілених висіслітельних систем" Додаток 1.