ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Конвертер програми з підмножини мови Сі в Паскаль з використанням LL (1) методу синтаксичного аналізу (вираження )
         

     

    Інформатика, програмування

    Новокузнецький філія-інститут

    Кемеровський Державний Університет

    Факультет Інформаційних Технологій

    Кафедра Автоматизованих Систем

    Курсова робота

    Дисципліна:

    "Мови програмування та методи трансляції"

    Тема:

    "Конвертер програми з підмножини мови Сі в Паскаль з використанням LL (1) методу синтаксичного аналізу

    (вираження) "

    Виконали:

    Студенти групи ІАС-00

    Мардасова У. А.

    Шалудько В. А.

    Перевірив:

    Бочаров М. И.

    Новокузнецьк, 2002р.

    ВСТУП

    При знайомстві з мовою СІ, особливо після вивчення Паскаля і Бейсіка,занурення в деталі його образотворчих засобів може затушувати важливудумка: хоча на ЗІ можна написати практично будь-яку прикладну програму, вінспочатку для цього не призначений. СІ є результатом еволюційногорозвитку мов створення системних програмних засобів. Якщо в прикладномупрограмуванні еволюція йшла від Фортрану до Алгол, Кобол, Паскалю і т.д.,то в системному - від Асемблер, прив'язаних до архітектури ЕОМ, до СІ, дляякого створені транслятори, що роблять його хоч і незалежним відархітектури, але не змінює основного призначення.

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

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

    Широкої популярності Паскаля серед програмістів сприяютьнаступні причини:

    . Завдяки своїй компактності, вдалому початкового опису

    Паскаль виявився досить легким для вивчення.

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

    . Мова Паскаль дозволяє чітко реалізувати ідеї структурного програмування і структурної організації даних.

    . Мова Паскаль зіграв велику роль у розвитку методів аналітичного доказу правильності програм і дозволив реально перейти від методів налагодження програм до систем автоматичної перевірки правильності програм.

    . Застосування мови Паскаль значно підняло "планку" надійності розроблюваних програм за рахунок вимог Паскаля до опису використовуються у програмі змінних, перевірки узгодженості програми при компіляції без її виконання.

    . Використання в Паскалі простих і гнучких структур управління: розгалужень, циклів.

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

    Мова СІ являє собою вдалий компроміс між бажаннямрозташовувати тими можливостями, які зазвичай надають програмістунастільки зрозумілі та зручні мови високого рівня, і прагненням ефективновикористовувати особливості комп'ютера. Крім набору засобів, притаманнихсучасних мов програмування високого рівня (структурність,модульність, що визначаються типи даних) в нього включені засоби дляпрограмування "майже" на рівні асемблера (використання покажчиків,побітового операції, операції зсуву). Великий набір операторів дозволяєписати компактні й ефективні програми. Однак, такі потужні засобивимагають від програміста обережності, акуратності і доброго знання мовиз усіма його перевагами і недоліками. На відміну від мовпрограмування типу Паскаль, що вимагають жорсткої дисциплінипрограмування обмежують свободу програміста, що сприяютьусунення багатьох помилок ще на стадії їх трансляції, мова СІ надаєпрограмісту найбільшу свободу. Однак, відповідальність за коректністьпрограм при цьому повністю лягає на програміста.

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

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

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

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

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

    . Обмежене використання типів даних, у повному обсязі підтримуються тільки арифметичні типи даних.

    . Вкладеність блоків, в яких використовуються однойменні об'єкти, не повинна перевищувати двох рівнів.

    . Процедурні блоки не повинні бути всередині BEGIN-блоків, вкладеність процедурних блоків не обмежується.

    . Допускається використовувати тільки одномірні масиви з відкритою правою кордоном (динамічні масиви) в якості параметрів процедурних блоків; при цьому адресуються елементи масиву в Паскаль програмою, починаючи з нульового елемента.

    . Обмежене використання змішання різних типів даних.

    Вирази в Паскалі

    Конструкція мови, що задає порядок виконання дії над елементамиданих, називається виразом. Вираз складається з операндів (operand --елемент даних, який бере участь в операції), - величин і виразів, надякими проводиться операція (константи і змінні всіх типів,звернення до функцій); круглих дужок і знаків операцій. Операціївизначають дії, які треба виконати над операндами. Наприклад, ввираженні (X + Y-10) X, Y і 10 - операнди; а "+" і "-" - знаки операційдодавання і віднімання.

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

    Операції в мові Паскаль діляться на арифметичні, відносини,логічні (Булевського), операцію @, рядкові та ін Виразивідповідно називаються арифметичними, відносини, Булевського,рядковими і т.д. в залежності від того, якого типу операнди та операції вних використовуються.

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

    Операції можуть бути унарний і бінарними. У першому випадку операціявідноситься до одного операнд і завжди записується перед ним, у другому --операція виражає відношення між двома операндами і записується міжними.

    Наприклад,-А - унарний операція, Х + У - бінарна.

    Арифметичні вираження та операції.

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

    Арифметичне вираз породжує ціле або дійсне
    (дійсне) значення. Найбільш простими формами арифметичних виразівє:
    . Ціла або дійсна константа без знака;
    . Ціла або дійсна мінлива;
    . Елемент масиву цілого або дійсного типу;
    . Функція, що приймає ціле або дійсне значення.

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

    Арифметичні операції виконують арифметичні дії у виразахнад значеннями операндів цілочисельних і речових типів. Арифметичніоперації мови Паскаль представлені в таблице1.

    Арифметичні операції
    | Операція | Дія | Типи операндів | Тип результату |
    | Бінарні |
    | + | Складання | Цілий | Цілий |
    | | | Речовий | Речовий |
    | - | Віднімання | Цілий | Цілий |
    | | | Речовий | Речовий |
    | * | Множення | Цілий | Цілий |
    | | | Речовий | Речовий |
    |/| Розподіл | Цілий | Речовий |
    | | | Речовий | Речовий |
    | DIV | Цілочисельне поділ | Цілий | Цілий |
    | MOD | Залишок від ділення | Цілий | Цілий |
    | AND | Арифметичне І | Цілий | Цілий |
    | SHL | Зрушення вліво | Цілий | Цілий |
    | SHR | Зсув вправо | Цілий | Цілий |
    | OR | Арифметичне АБО | Цілий | Цілий |
    | XOR | виключає диз'юнкція | Цілий | Цілий |
    | | | | |
    | Унарні |
    | + | Збереження знака | Цілий | Цілий |
    | | | Речовий | Речовий |
    | - | Заперечення знака | Цілий | Цілий |
    | | | Речовий | Речовий |
    | NOT | Арифметичне заперечення | Цілий | Цілий |

    Вирази та операції відношення.

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

    У мові Паскаль операції відносини і розглянуті нижче Булевськогооперації більш важливі при написанні програм, ніж в інших мовах, тому щовони інтенсивно використовуються для реалізації розгалужуються і циклічнихалгоритмів. У таблиці 2 наведено операції відносини, допустимі у версіїмови Паскаль для ПЕОМ.

    порівнювані величини можуть належати до будь-якого скалярному абоперераховується типу даних. Результат завжди має булевський тип іприймає одне з двох значень: True (істина) або False (неправда).

    Операції відносини.
    | Операція | Назва | Вираз | Результат |
    | = | Так само | A = B | True, якщо А дорівнює В |
    | | Не одно | AB | True, якщо А не дорівнює В |
    |> | Більше | A> B | True, якщо А більше В |
    | <| Менше | A = | Більше або дорівнює | A> = B | True, якщо А більше або дорівнює В |
    | = B
    | B = П | П = B П (+ C
    B (BBB '
    28. B1 (BB '
    44. B '(= BB'
    46. B '(= П
    10. B '(| | | 27 | | | 43 | | | | | | |
    | <| | | 28 | | | 44 | | | | | | |
    | - | | | 26 | | | 42 | | | | | | |
    | + | | | 25 | | | 41 | | | | | | |
    |/| | | 24 | | | 40 | | | | | | |
    | * | | | 23 | | | 39 | | | | | | |
    |% | | | 22 | | | 38 | | | | | | |
    | - | 56 | 20 | 7 | 15 | | | | | | | | |
    | + + | 57 | 21 | 8 | 17 | | | | | | | | |
    | K | | | | 18 | | | | | | | | |
    | I | 54 | 1 | | 12 | | | | 16 | | | | |
    |) | | | 37 | | | 53 | 13 | | 19 | 59 | 10 | |
    | (| 55 | 11 | 9 | 14 | | | | | | | | |
    | | S | B | B1 | B2 | B3 | B '| C | C1 | C2 | S' | S1 | # |

    Керуюча таблиця для висловлення на мові Turbo Pascal 7.0

    | | - | | | 11 | | 32 | | 23 | | | 19 | 38 | 39 |
    | Or | | | | | 32 | | 23 | | | 18 | | |
    | = | | | 9 | | 32 | | 23 | | | 19 | | |
    |> | | | 7 | | 32 | | 23 | | | 19 | | |
    | <| | | 6 | | 32 | | 23 | | | 19 | | |
    | | | | 8 | | 32 | | 23 | | | 19 | | |
    | = | | | 5 | | 32 | | 23 | | | 19 | | |
    | And | | | | | 31 | | 23 | | | | | |
    | Mod | | | | | 30 | | 23 | | | | | |
    | Div | | | | | 29 | | 23 | | | | | |
    |/| | | | | 28 | | 23 | | | | | |
    | * | | | | | 27 | | 23 | | | | | |
    | - | 34 | 2 | | | 32 | | 23 | | 13 | 17 | | |
    | + | 33 | 1 | | | 32 | | 23 | | 12 | 16 | | |
    |, | | | 11 | | 32 | | 23 | | | 19 | 37 | |
    | I | 35 | 3 | | 25 | | 20 | | | 14 | | | |
    |) | | | 11 | | 32 | | 23 | 24 | | 19 | 38 | |
    | (| 36 | 4 | | 26 | | 21 | 22 | | 15 | | | |
    | | S | B | B '| C | C' | M | M '| M1 | П | П' | S '| # |

    Приклад роботи програми
    Ввели вираз на мові СІ:
    Курсова робота ПО ЯПМТ
    Оберіть мову: 1 - Сісі + + 2 - Turbo Pascal 7.0
    1
    Напишіть вираз на мові С:
    (e + e == 7)
    Дескріпторний текст:
    0 2 9 2 16 2 1

    Замінити (S ', В2) Зрушення

    Замінити (C, В1) Зрушення

    Замінити (В', В) Зрушення

    Замінити (В1) Зрушення

    Замінити (В ', В) Зрушення

    Замінити (В1) Зрушення

    виштовхнути Тримати

    виштовхнути Тримати

    виштовхнути Тримати

    Замінити (В ') Зрушення

    виштовхнути Тримати

    виштовхнути Тримати
    ДОПУСТИТИ
    Вихідна стрічка:
    55 12 25 1 31 1 37 53 53 13 53 59 60

    Ввели не вираження:
    Курсова робота ПО ЯПМТ
    Оберіть мову: 1 - Сісі + + 2 - Turbo Pascal 7.0
    1
    Напишіть вираз на мові С:t +
    Дескріпторний текст:
    2 9

    Замінити (S ', В1) Зрушення

    Замінити (В', В) Зрушення
    Відкинути
    Вихідна стрічка:
    54 25 0

    Ввели вираз на Паскалі:
    Курсова робота ПО ЯПМТ
    Оберіть мову: 1 - Сісі + + 2 - Turbo Pascal 7.0
    2
    Напишіть вираз мовою TP:ww = s +1
    Дескріпторний текст:
    2 11 2 4 2

    Замінити (В'П'C'M ') Зрушення

    виштовхнути Тримати

    виштовхнути Тримати

    виштовхнути Тримати

    Замінити (П) Зрушення

    Замінити (П'C'M ') Зрушення

    виштовхнути Тримати

    виштовхнути Тримати

    Замінити (П'C) Зрушення

    Замінити (C'M ') Зрушення

    виштовхнути Тримати

    виштовхнути Тримати < p> виштовхнути Тримати
    ДОПУСТИТИ
    Вихідна стрічка:
    3 23 32 19 5 14 23 32 16 25 23 32 19 39
    Ввели не вираження
    Курсова робота ПО ЯПМТ
    Оберіть мову: 1 - Сісі + + 2 - Turbo Pascal 7.0
    2
    Напишіть вираз мовою TP:f = s +
    Дескріпторний текст:
    2 11 2 4

    Замінити (В'П'C'M ') Зрушення

    виштовхнути Тримати

    виштовхнути Тримати

    виштовхнути Тримати

    Замінити (П) Зрушення

    Замінити (П'C'M ') Зрушення

    виштовхнути Тримати

    виштовхнути Тримати

    Замінити (П'C) Зрушення
    Відкинути
    Вихідна стрічка:
    3 23 32 19 5 14 23 32 16 0

    Лістинг програми:

    # include
    # include
    # define n 100
    # define t 17
    # define m 53
    # define g 11

    char s1 [n], s [n], a [n];int j = 0, h, vl [n], y = 0;

    /*------------------------- - ENTER, ВИРАЖЕНОЮ ------------------------------ * /int vvod ()
    (int i;printf ( "tttКУРСОВАЯ РОБОТА ПО ЯПМТn");printf ( "Виберіть мову: 1 - Сісі + + 2 - Turbo Pascal 7.0n");scanf ( "% d", & y);if (y == 1)

    printf ( "Напишіть вираз на мові С: n");
    (for (i = 0; i

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status